为什么在(nopython=True)的情况下,numba会报错关于numpy方法?

7
我希望您能够使用 numba 来提高某些缓慢代码的速度。其中大部分时间都花费在单个函数中。我首先尝试仅使用
@jit 

在我的函数定义之前,这有点改善了时间。然后,我尝试使用。
@jit(nopython=True) 

相反,根据我在文档中所读到的,我在函数内部使用的numpy方法应该受支持(例如transpose)。但是,我却遇到了一个错误。

Failed at nopython (nopython frontend)
Untyped global name 'transpose'

5
以下链接中可以找到NumPy支持的所有功能列表。另外,请发布代码和您正在使用的版本,否则很难诊断出问题所在:http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html - JoshAdel
我不太确定如何检查我正在使用哪个版本。'numba --verison'似乎不起作用。我认为它是0.27.0,但我不确定。 - chia
numba.__version__ - Nirmal
1个回答

8
为了使用transpose,你需要将其作为numpy数组的方法进行调用(就像文档描述的那样)。因此,以下方式是有效的:
import numpy as np
import numba as nb

@nb.jit(nopython=True)
def func(x):
    y = x.transpose()  # or x.T
    return y

x = np.random.normal(size=(4,4))
x_t = func(x)

但在函数中调用y = np.transpose(x)则不会。我猜你是在做后者。注意,我参考的是Numba 0.25.0。


1
是的,你说得对。我正在使用numpy.transpose(x)。 - chia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接