在 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一个int64
1D numpy.array
。但是你实际上 return 一个列表,所以 numba
无法编译函数。
"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一个int64
1D numpy.array
。但是你实际上 return 一个列表,所以 numba
无法编译函数。