gpt4 book ai didi

Python/Numba : Unknown attribute error with scipy. special.gammainc()

转载 作者:太空狗 更新时间:2023-10-30 02:43:50 27 4
gpt4 key购买 nike

我在使用@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 可见?

最佳答案

问题是 gammainc 不是 Numba 固有地知道如何处理的一小部分函数之一(参见 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,而是立即应用于整个数组,因此也应该很快。

关于Python/Numba : Unknown attribute error with scipy. special.gammainc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com