在 numba 中创建一个空列表列表

Creating a list of empty lists in numba

为什么下面的 foo 函数可以工作而 bar one 不能?我在这里错过了什么?

@numba.njit                                           
def foo(x):                                           
    return [[i for i in range(0)] for _ in range(x)]

@numba.njit                                           
def bar(x):                                           
    return [[] for _ in range(x)]

bar 创建一个空列表。 numba 需要推断在 nopython 模式下使用的所有变量的类型来编译您的代码(而 njit 仅编译为 nopython 模式)。但是不能键入空列表,因为 numba 无法推断存储在列表中的项目的类型(因为有 none)。只需尝试以下操作以获得更多 "descriptive" 错误消息:

numba.typeof([])

如果您使用对象模式(例如使用 jit 装饰器而不指定 nopython=True),您可以使用无类型的 python 对象,但代价是执行性能较慢。