(完全解决)(numba)TypingError: Failed in nopython mode pipeline( Invalid use of Function)

本文介绍了在使用Numba库尝试加速Python代码时遇到的TypingError问题,具体表现为Numba无法理解`str`函数和高级索引操作。作者建议并非所有代码都适合加速,特别是涉及字符串操作和复杂索引的情况。解决方案包括避免使用`nopython=True`选项或寻找替代的非Numba优化方法。此外,文章强调了理解Numba对代码优化的限制以及选择合适加速场景的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值