如何在不破坏性能的情况下修改Numba中的列表?

时间:2017-04-11 18:32:13

标签: python performance list copy numba

这是一个例子。如果您运行此代码,它将打印大约需要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数组,因为我需要在我的代码中的其他位置重新调整列表。)

1 个答案:

答案 0 :(得分:1)

如果您确实需要使用Numba的列表,并且副本太昂贵,您将需要在对象模式下编译此函数。 nopython模式不能直接在列表上运行;这样做基本上是一个Python对象操作,事物nopython模式禁止。