我在尝试将这个整数的memoryview传递给这个(相当琐碎的)函数时遇到了问题。Python 给了我这个错误:
ValueError: Buffer dtype mismatch, expected 'int' but got 'long'
有人能帮我理解一下发生了什么吗?在stackoverflow上搜索,似乎与Python解释类型的方式以及C解释类型的方式有关。
%%cython
def myfunction(int [:] y):
pass
# Python code
import numpy as np
y = np.array([0, 0, 1, 1])
myfunction(y)
这会产生上面提到的 ValueError
错误。
编辑:我还发现了一些其他问题。
为了澄清,如果我按照以下方式声明y
,则仍然会出现此错误:
y = np.array([0, 0, 1, 1], dtype='int')
y = np.array([0, 0, 1, 1], dtype=np.int)
y = np.array([0, 0, 1, 1], dtype=np.int64)
然而,如果我使用以下方式声明y
,它将起作用:
y = np.array([0, 0, 1, 1], dtype=np.int32)
有人可以提供为什么会出现这种情况的建议吗?在不同的计算机上使用 np.int32
会起作用吗?(我使用的是MacBook Pro Retina,2013年版。)
np.int64_t
吗?(我知道我之前问过是否在所有计算机上都可以使用dtype=np.int32
,但这个选项是在Python代码中的。我想知道您提供的np.int64_t
选项是否适用于所有计算机,因为它是Cython代码。) - hlin117np.int64
数组传递给它,它就可以很好地完成任务。np.int64_t
在内部如何转换为C
类型,这是numpy
的问题,而不是我们的问题(我相信它已经得到了解决,:P)。抱歉,这不是一个明确的答案,但我经常在教程和其他人的代码中看到这种用法。 - CT Zhunp.int64
的观点是正确的。 - DavidW