Numba 无法编译一个简单的函数

Numba can not compile a simple function

我正在尝试编译一个简单的函数,它接受一个 python 列表,然后根据索引列表拆分它。我是 numba 的新手,文档对我没有帮助。

问题 我无法成功编译函数

要编译的代码 arr 变量是一个 python 浮点数或整数列表,idx 是一个 numpy 数组或 python 整数列表,结果应该是一个 2d python 浮点数或整数列表arr 输入

from numba.pycc import CC

cc = CC('trial')
# Uncomment the following line to print out the compilation steps
cc.verbose = True



@cc.export('split_numba', 'f8[:](f8[:], i4[:])')
def split_numba(arr, idx):
    out = []
    s = 0
    for n in range(len(idx)):
        e = idx[n]
        out.append(arr[s:e])
        s = e

    return out

if __name__ == "__main__":
    cc.compile()

错误

No conversion from list(array(float64, 1d, A))<iv=None> to array(float64, 1d, A) for 'return_value.1', defined at None

File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
    <source elided>
        
    return out
    ^

During: typing of assignment at C:\Users\chelo\OneDrive\ALCANTARILLADO_PyQt5[=11=]_MODULOS\RUT_COMPILE.py (38)

File "RUT_COMPILE.py", line 38:
def split_numba(arr, idx):
    <source elided>
        
    return out

函数的输出类型不正确,因为 out 是一个 数组列表 。它应该是 'List(f8[:])(f8[:], i4[:])' 而不是 'f8[:](f8[:], i4[:])'.

请注意,指定的输入是 而不是 Python 列表:f8[:] 引用具有 64 位浮点项的 Numpy 数组类型。 Numba 提供的 List 类型也不是 pure-Python 列表(在 Numba 文档中称为“反射列表”)。它是另一种类型化的列表类型(因此 Numba 需要将 pure-Python 列表转换为输入列表的类型化列表和输出列表的反向操作)。反射列表支持异构类型的项目。这样的操作引入了一个开销,如果计算量很小(这是你的情况),这个开销可能很大。