这是一个例子。如果您运行此代码,它将打印大约需要1秒的时间来调用foo
:
import timeit
import numba
@numba.njit('void(List(intp, True))')
def foo(v): v[0] += 1
a = range(1 << 25)
start = timeit.default_timer()
foo(a)
stop = timeit.default_timer()
print stop - start
显然,Numba正在来回复制这份名单。我有什么方法可以避免它吗? (我不能轻易使用NumPy数组,因为我需要在我的代码中的其他位置重新调整列表。)
答案 0 :(得分:1)
如果您确实需要使用Numba的列表,并且副本太昂贵,您将需要在对象模式下编译此函数。 nopython模式不能直接在列表上运行;这样做基本上是一个Python对象操作,事物nopython模式禁止。