guvectorize 在 nopython 模式下不解析类型
guvectorize Not resolving types in nopython mode
我遇到了 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 在 Numba 0.53 中对 guvectorize
的动态调度更新在最后提到了这一点(强调):
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"
.
我遇到了 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 在 Numba 0.53 中对 guvectorize
的动态调度更新在最后提到了这一点(强调):
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"
.