在nopython模式下不解析类型

2024-09-28 22:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力克服一个麻木的错误 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])

Tags: intesttrueforisdefnpout
1条回答
网友
1楼 · 发布于 2024-09-28 22:35:06

我使用的是Numba 0.53.1,可以复制此错误。Numba 0.53中guvectorize的动态调度更新中的blog在末尾提到了这一点(重点添加):

In the future we would like to bring the @guvectorize capabilities closer to the @vectorize ones. For instance, currently it is not possible to call a guvectorize function from a jitted (@jit) function.

vectorize有一个类似的open issue,但它表明@vectorize函数可以在@jit函数中调用,只是它被限制为默认的target = "cpu"

相关问题 更多 >