使用@jit decorator运行代码时出错。似乎找不到函数scipy.special.gammainc()的某些信息:
Failed at nopython (nopython frontend)
Unknown attribute 'gammainc' for Module(<module 'scipy.special' from 'C:\home\Miniconda\lib\site-packages\scipy\special\__init__.pyc'>) $164.2 $164.3 = getattr(attr=gammainc, value=$164.2)
如果没有@jit decorator,代码将运行良好。也许有必要使SimPi.Stand模块的属性能看到NUBA?
提前感谢您的建议、意见等。
最佳答案
问题是gammainc
不是NUBA固有地知道如何处理的一小部分函数(见http://numba.pydata.org/numba-doc/dev/reference/numpysupported.html)-实际上没有一个SCIPY函数。这意味着您不能在“nopython”模式下使用它,不幸的是-它只需要将其视为一个普通的python函数调用。
如果删除nopython=True
,它应该可以工作。然而,这并不是非常令人满意,因为它可能会慢一些。如果看不到你的代码,很难知道确切的建议是什么。然而,一般情况下:
循环(不包含gammainc
之类的内容)将加快速度,即使没有nopython。gammainc
是一个“UFUNC”,这意味着它一次可以很容易地应用到整个数组中,并且无论如何都应该快速运行。
您可以调用func.inspect_types()
来查看它是否能够编译。
举个简单的例子:
from scipy.special import gammainc
import numba as nb
import numpy as np
@nb.jit # note - no "nopython"
def f(x):
for n in range(x.shape[0]):
x[n] += 1
y = gammainc(x,2.5)
for n in range(y.shape[0]):
y[n] -= 1
return y
f(np.linspace(0,20)) # forces it to be JIT'd and outputs an array
然后
f.inspect_types()
将这两个循环标识为“提升循环”,这意味着它们将被jit并快速运行。带gammainc
的位不是jit'd,而是一次应用到整个数组,因此也应该很快。关于python - Python/Numba:scipy.special.gammainc()出现未知属性错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31975205/