在 numba 函数中创建一个新的 list/array

creating a new list/array in a numba function

"test_numba"下面的函数报错:"cannot type empty list"但它在没有numba编译的情况下工作。

def test(list_test,count):

    test_list =[]
    for all in list_test:
        test_list.append(all)

    if count ==1:

        return np.asarray(test_list, dtype=int)
    else:
        return np.asarray([1,2,3,4],dtype=int)

    test_numba = numba.jit("int64[:](int32[:],int32)")(test)
    # calling numba function
    test_numba(np.asarray([1,2,3,4],dtype=int),1)
    # calling python function
    test(np.asarray([1,2,3,4],dtype=int),1)

Numba 签名需要 Numpy-数组。如果你只是省略签名,你可以让它工作:

test_numba = numba.jit()(test)

但由于这会回退到 Python 列表,因此不会提供任何加速。

使用您的签名,您强制 numba 假定 int32 1D numpy.array 作为第一个参数传递,标量 uint 作为第二个参数传递。并且函数应该return一个int641D numpy.array。但是你实际上 return 一个列表,所以 numba 无法编译函数。

另见 numba signatures and eager compilation