guvectorize 在 nopython 模式下不解析类型

2024-02-03

我正在努力解决 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)

然而,删除测试功能上的 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,可以复制此错误。这blog https://labs.quansight.org/blog/2021/02/enhancements-to-numba-guvectorize-decorator/动态调度更新为guvectorize在 Numba 0.53 的最后提到了这一点(添加了强调):

未来我们希望能带来@guvectorize能力更接近@vectorize那些。例如,目前无法从 jitted (@jit) 功能。

有一个类似的开放问题 https://github.com/numba/numba/issues/5720 with vectorize,但它证明了@vectorize可以调用函数@jit功能,只是它仅限于默认值target = "cpu".

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

guvectorize 在 nopython 模式下不解析类型 的相关文章

随机推荐