使用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

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐