【问题标题】:Why numba raise a type error in numpy linspace为什么 numba 在 numpy linspace 中引发类型错误
【发布时间】:2025-11-30 18:45:01
【问题描述】:

我正在使用numba 0.34.0 和numpy 1.13.1。一个小例子如下所示:

import numpy as np    
from numba import jit
@jit(nopython=True)
def initial(veh_size):
    t = np.linspace(0, (100 - 1) * 30, 100, dtype=np.int32)
    t0 = np.linspace(0, (veh_size - 1) * 30, veh_size, dtype=np.int32)
    return t0

initial(100)

tt0 的行都有相同的错误信息。

错误信息:

numba.errors.InternalError: 
[1] During: resolving callee type: Function(<function linspace at 0x000001F977678C80>)
[2] During: typing of call at ***/test1.py (6)

【问题讨论】:

    标签: python numpy numba


    【解决方案1】:

    因为np.linspace 的numba 版本不接受dtype 参数(source: numba 0.34 documentation):

    2.7.3.3。其他功能

    支持以下*函数:

    • [...]

    • numpy.linspace()(仅限 3 参数形式)

    • [...]

    您需要使用astype 在 nopython-numba 函数中进行转换:

    import numpy as np    
    from numba import jit
    @jit(nopython=True)
    def initial(veh_size):
        t = np.linspace(0, (100 - 1) * 30, 100).astype(np.int32)
        t0 = np.linspace(0, (veh_size - 1) * 30, veh_size).astype(np.int32)
        return t0
    
    initial(100)
    

    或者只是不要在 nopython-numba 函数中使用 np.linspace 并将其作为参数传递。这避免了一个临时数组,我怀疑 numbas np.linspace 比 NumPys 快。

    【讨论】:

    • 谢谢。抱歉,我没有检查numba,只是认为它应该完全支持linspace
    • 不客气。我经常希望 numbas 异常能有点更有帮助 - 但目前如果遇到奇怪的TypingErrors (作为常规 numba 用户,我已经为支持的功能页面添加了书签),则必须参考 numba 文档。 :)
    • 是的,我也有同样的感觉。 numba 的错误信息不容易理解为pythonnumpy。它当然会混淆错误是如何发生的。
    最近更新 更多