我在使用@jit装饰器运行代码时遇到了一个错误,似乎找不到函数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装饰器,代码将运行良好。也许需要一些东西来使scipy.special模块的属性对Numba可见?
1条答案
按热度按时间k3fezbri1#
问题是
gammainc
不是Numba天生知道如何处理的一小部分函数之一(参见http://numba.pydata.org/numba-doc/dev/reference/numpysupported.html)--事实上scipy函数都不是,这意味着你不能在“nopython”模式下使用它,不幸的是--它只需要把它当作一个普通的python函数调用。如果你删除
nopython=True
,它应该可以工作。但是,这并不是很令人满意,因为它可能会更慢。没有看到你的代码,很难知道确切的建议。但是,一般来说:gammainc
之类的东西)将被加速,即使没有nopython。gammainc
是一个“ufunc”,这意味着它可以很容易地一次应用于整个阵列,并且无论如何都应该运行得很快。func.inspect_types()
来查看它是否能够编译。举个简单的例子:
然后
f.inspect_types()
将这两个循环标识为“提升循环”,这意味着它们将是JIT的并且运行得很快。gammainc
中的位不是JIT的,而是一次应用于整个数组,因此也应该很快。