我正在处理numba错误Untyped global name 'is_a_subset': Cannot determine Numba type of <class 'numba.np.ufunc.gufunc.GUFunc'>
这通常意味着我使用了numba不支持的方法。下面的代码失败。
@guvectorize("(n),(n)->(n)",nopython=True)
def is_a_subset(x,y,out):
out[:]=np.array([item in x for item in y])
@njit()
def test(x,y,z):
is_a_subset(x,y,z)
return z.mean()
x=np.array([[1,2,3],[3,2,1]])
y=np.array([[3,6,1],[1,2,3]])
z = np.empty_like(x)
test(x,y,z)
然而,删除test函数中的njit使一切正常。
def test(x,y,z):
is_a_subset(x,y,z)
return z.mean()
为什么numba在无python模式下难以解析类型?
我也试过,但没有不同的结果
@guvectorize(["f8[:],f8[:],f8[:]"],"(n),(n)->(n)",nopython=True)
def is_a_subset(x,y,out):
out[:]=np.array([item in x for item in y])
我使用Numba 0.53.1,可以重复此错误。这篇关于Numba 0.53中guvectorize
的动态调度更新的博客在最后提到了这一点(强调):
在未来,我们希望使
@guvectorize
的能力更接近@vectorize
的能力。例如,目前不可能从编译(@jit
)函数调用guvectorize函数。
vectorize
也有类似的开放问题,但它表明@vectorize
函数可以在@jit
函数中调用,只是它被限制为默认的target = "cpu"
。