Python Numba:根据强制转换规则';无法将输入强制转换为任何受支持的类型';安全'';

Python Numba:根据强制转换规则';无法将输入强制转换为任何受支持的类型';安全'';,python,numba,Python,Numba,我最近一直在和麻木做斗争。 直接从numba docs复制了此代码段,效果良好: @guvectorize([(int64[:], int64, int64[:])], '(n),()->(n)') def g(x, y, res): for i in range(x.shape[0]): res[i] = x[i] + y a = np.arange(5) g(a,2) 给y一个数组将生成一个网格。不过,我经常对2个数组求和,下面是我通过修改代码片段而得到的代

我最近一直在和麻木做斗争。 直接从numba docs复制了此代码段,效果良好:

@guvectorize([(int64[:], int64, int64[:])], '(n),()->(n)')
def g(x, y, res):
    for i in range(x.shape[0]):
        res[i] = x[i] + y

a = np.arange(5)
g(a,2)
给y一个数组将生成一个网格。不过,我经常对2个数组求和,下面是我通过修改代码片段而得到的代码

@guvectorize([(int64[:], int64[:], int64[:])], '(n),(n)->(n)')
def add_arr(x, y, res):
    for i in range(x.shape[0]):
        res[i] = x[i] + y[i]

p = np.ones(1000000)
q = np.ones(1000000)
r = np.zeros(1000000)

add_arr(p,q)
这给了我一个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-75-074c0fd345aa> in <module>()
----> 1 add_arr(p,q)

TypeError: ufunc 'add_arr' not supported for the input types, and the      inputs could not be safely coerced to any supported types according to the casting rule ''safe''
TypeError回溯(最近一次调用)
在()
---->1添加arr(p,q)
TypeError:输入类型不支持ufunc“add_arr”,并且无法根据强制转换规则“safe”将输入安全强制为任何受支持的类型

我以前遇到过几次这个错误,但我不知道它意味着什么,也不知道如何修复它。我如何获得期望的结果?提前感谢。

您正在使用
numpy.ones
生成一个列表,并根据文档():

数据类型:数据类型,可选

阵列所需的数据类型,例如numpy.int8。默认值为numpy.float64

np.one(1000000)
是一个
numpy.float64
one的列表。但是您的
add\u arr
规范需要
int64
列表,因此
TypeError
爆炸

一个简单的解决方案:

p = np.ones(1000000, dtype=np.int64)
q = np.ones(1000000, dtype=np.int64)

不太熟悉numba,但看起来您传递的是3个参数,而不是粘贴的工作示例中的2个参数。当你调用add_arr(p,q)时会发生什么?@Antoine M Ah dang,我会编辑我的代码。但同样的事情也发生了。仍然会出现相同的错误。只是检查一下,但您没有编辑问题中的错误。它仍然显示
--->1 add\u arr(p,q,r)
。你确定要重置你的环境,这样你就不会运行过时的字节码了吗?对不起,我的错。有一些即时的,现在似乎无法在我的手机上编辑它。但是是的,不是陈旧的代码。