python - 带有 numba 的 Scipy 特殊功能
问题描述
此代码失败:
import numpy as np
from numba import jit
import scipy.special as sp
@jit(nopython=True)
def f(a):
return sp.xlogy(a, a)
a = np.array([1,2,0,1], dtype=float)
f(a)
它给出了以下错误
TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Unknown attribute 'xlogy' of type Module(<module 'scipy.special' from '/home/yair/.local/lib/python3.8/site-packages/scipy/special/__init__.py'>)
但是,我相信它应该可以工作,因为它在这里说xlogy
可能会超载。2015 年的回答说这无法完成(对于其他一些功能),但也许我认为它改变了。
当然,我可以自己实现它,但最好使用已知的解决方案。
编辑:根据 Andras Deak 在下面的建议,我尝试使用numba-scipy
. 我无法让它工作,并希望有一些使用示例。这是我的尝试-它们都失败了,请参阅下面的错误:
import numpy as np
from numba import jit
import numba_scipy
import scipy as sp
from scipy import special as spc
@jit(nopython=True)
def f1(a):
return numba_scipy.special.xlogy(a,a)
@jit(nopython=True)
def f2(a):
return numba_scipy.xlogy(a,a)
@jit(nopython=True)
def f3(a):
return sp.special.xlogy(a,a)
@jit(nopython=True)
def f4(a):
return spc.xlogy(a,a)
a = np.array([0,1,2])
try:
f1(a)
except Exception as e:
print('f1 fails')
print(e)
try:
f2(a)
except Exception as e:
print('f2 fails')
print(e)
try:
f3(a)
except Exception as e:
print('f3 fails')
print(e)
try:
f4(a)
except Exception as e:
print('f4 fails')
print(e)
完整的错误信息:
/home/yair/.local/lib/python3.8/site-packages/numba/core/dispatcher.py:238: UserWarning: Numba extension module 'numba_scipy' failed to load due to 'ValueError(No function '__pyx_fuse_0pdtr' found in __pyx_capi__ of 'scipy.special.cython_special')'.
entrypoints.init_all()
f1 fails
Failed in nopython mode pipeline (step: nopython rewrites)
module 'numba_scipy' has no attribute 'special'
f2 fails
Failed in nopython mode pipeline (step: nopython rewrites)
module 'numba_scipy' has no attribute 'xlogy'
f3 fails
Failed in nopython mode pipeline (step: nopython frontend)
Unknown attribute 'xlogy' of type Module(<module 'scipy.special' from '/home/yair/.local/lib/python3.8/site-packages/scipy/special/__init__.py'>)
File "example.py", line 19:
def f3(a):
return sp.special.xlogy(a,a)
^
During: typing of get attribute at example.py (19)
File "example.py", line 19:
def f3(a):
return sp.special.xlogy(a,a)
^
f4 fails
Failed in nopython mode pipeline (step: nopython frontend)
Unknown attribute 'xlogy' of type Module(<module 'scipy.special' from '/home/yair/.local/lib/python3.8/site-packages/scipy/special/__init__.py'>)
File "example.py", line 23:
def f4(a):
return spc.xlogy(a,a)
^
During: typing of get attribute at example.py (23)
File "example.py", line 23:
def f4(a):
return spc.xlogy(a,a)
^
解决方案
由于您根据评论遇到安装问题,因此我特别建议使用numba-scipy代替 numba 本身的创建者(指向 pypi 的链接)。对包使用第一方扩展总是一个好主意。
您链接的文档 与numba_special
. 如果您查看主页,您将看到第一个示例:
>>> import numba
>>> import scipy.special as sc
>>> import numba_special # The import generates Numba overloads for special
>>> @numba.njit
... def gamma_plus_1(x):
... return sc.gamma(x) + 1.0
...
>>> gamma_plus_1(5.0)
25.0
请注意import numba_special
您缺少的行。
您还必须先安装numba-special。另请注意项目页面上的警告:
安装
Numba 特殊依赖于 SciPy 和 Numba。在 Numba 版本中包含此问题的修复之前,必须针对 Numba 的主分支安装 numba_special。
推荐阅读
- python - 我应该使用什么代码在我的 pygame 小行星游戏中移动小行星?
- javascript - 如何在javascript中将麦克风静音
- java - 有没有办法让用户关注 webview Android 应用程序中的链接?
- java - 从私钥模数和私有指数中获取 RSA 公钥
- android - Play 商店 - 打开托管 google play 时,内部应用共享和内部测试不起作用
- php - 用具有相同键的不同关联数组的值替换关联数组的键
- reactjs - 如何使用 react-image-upload 依赖项将图像上传到数据库?
- mysql - 没有 id 的 Laravel 质量分配(自动增量)
- javascript - 在 Angular 应用程序中打印 PDF 文件而无需预览
- mysql - 具有多个 AND OR 的 MySQL Case 语句不能嵌套