Numba:根据转换规则“'safe'”,无法将输入强制转换为任何受支持的类型
Numba : inputs could not be coerced to any supported types according to the casting rule ''safe''
最近我一直在为 numba 苦苦挣扎。
直接从 numba 文档复制此代码片段,它工作正常:
@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''
我以前遇到过几次这个错误,但我不知道它是什么意思或如何修复它。我怎样才能得到想要的结果?提前致谢。
您正在使用 numpy.ones
生成一个列表,并且根据文档 (https://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html):
dtype : data-type, optional
The desired data-type for the array, e.g., numpy.int8. Default is numpy.float64.
np.ones(1000000)
是 numpy.float64
个的列表。但是您的 add_arr
规范需要 int64
的列表,因此 TypeError
爆炸了。
一个简单的修复:
p = np.ones(1000000, dtype=np.int64)
q = np.ones(1000000, dtype=np.int64)
最近我一直在为 numba 苦苦挣扎。 直接从 numba 文档复制此代码片段,它工作正常:
@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''
我以前遇到过几次这个错误,但我不知道它是什么意思或如何修复它。我怎样才能得到想要的结果?提前致谢。
您正在使用 numpy.ones
生成一个列表,并且根据文档 (https://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html):
dtype : data-type, optional
The desired data-type for the array, e.g., numpy.int8. Default is numpy.float64.
np.ones(1000000)
是 numpy.float64
个的列表。但是您的 add_arr
规范需要 int64
的列表,因此 TypeError
爆炸了。
一个简单的修复:
p = np.ones(1000000, dtype=np.int64)
q = np.ones(1000000, dtype=np.int64)