使用numba加速的时候报错:

from numba import jit
@jit(nopython=True)
def nodets2key(batch: int, node: int, ts: float):
    key = '-'.join([str(batch), str(node), str(ts)])
    return key

在pycharm中报错如下:

numba.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of Function(<class 'str'>) with argument(s) of type(s): (int64)

解决办法:

根据那个Invalid use of Function后面括号里面的就是报错的来源,因此,我们定位到str函数。

也就是说,numba不知道str是一个什么东西,无法进行优化,加速失败。

类似地还有,比如下面这个也会报错:

@jit(nopython=True)
def foo(a):
    indices = np.where(a>0.5)
    a[indices] = 1. / a[indices]#numba不知道这个高级索引a[indices]怎么用。
    return a

所以我的观点是:

1.不要用加速了,并不是什么代码都可以和适合加速的,加速大家应该知道适合于那些循环多以及大量基本数据类型数学计算的地方。如果什么函数都用加速,报错报死你,不信你试一试,这就是一个例子。

2.将(nopython=True)去掉,退化为普通加速,就不会报错了。

参考:https://stackoverflow.com/questions/61885520/numba-invalid-use-of-function-with-arguments-of-types

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐