首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >numba的特殊功能

numba的特殊功能
EN

Stack Overflow用户
提问于 2020-08-16 08:56:54
回答 2查看 3.6K关注 0票数 4

此代码失败:

代码语言:javascript
代码运行次数:0
运行
复制
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)

它给出了以下错误

代码语言:javascript
代码运行次数:0
运行
复制
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下面的建议,我尝试使用numba-scipy。我无法使它工作,并希望得到一些使用的例子。以下是我的尝试--它们都失败了,参见下面的错误:

代码语言:javascript
代码运行次数:0
运行
复制
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)

完整的错误消息:

代码语言:javascript
代码运行次数:0
运行
复制
/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)
        ^
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-16 09:03:25

由于您有安装问题,根据评论,我特别建议使用伦巴-枕叶,而不是从numba本身的创建者(链接到pypi)。使用包的第一方扩展总是一个好主意。

你所链接的文件numba_special有关。如果您查看主页面,您将看到第一个示例:

代码语言:javascript
代码运行次数:0
运行
复制
>>> 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特别依靠SciPy和Numba。在Numba发行版中包含了本期的修复之前,必须针对Numba的主分支安装numba_special。

票数 1
EN

Stack Overflow用户

发布于 2020-08-16 09:29:42

您正在从scipy.special调用xlogy函数,实际上,对于@jit修饰函数调用的函数也需要使用@jit修饰。所以,这就是为什么x与f函数和numba抛出错误不兼容的原因。解决办法可以是:

代码语言:javascript
代码运行次数:0
运行
复制
import numpy as np
from numba import jit


@jit(nopython=True)
def myxlogy(x,y):
    return x*np.log(y)


@jit(nopython=True)
def f(a):
    return myxlogy(a,a)

a = np.array([1,2,0,1], dtype=float)
f(a)
>>array([0.        , 1.38629436,        nan, 0.        ])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63434971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档