numexpr.evaluate( “A + B”,出= A)

时间:2013-03-14 21:06:47

标签: python numpy numexpr

在python numexpr中为你操作的同一个数组赋值是否安全,以避免创建临时数组?

project homepage上的内存使用描述看起来没问题,但是如果不深入了解源代码,这几乎不是一个可靠的答案。

我尝试了以下哪个工作正常,但我希望得到更熟悉此软件包的人的确认:

import numpy as np
import numexpr as ne
a = np.ones(5)
b = a.copy()
ne.evaluate("a+b",out=a)
array([ 2.,  2.,  2.,  2.,  2.])

1 个答案:

答案 0 :(得分:7)

它有效,因为numexpr仍在内部使用临时数组,虽然块大小为1024个元素(如果使用VML则为4096)。您可以将输入的这些块视为切片,尽管它们在评估期间存储为适当的C数据类型,以提高速度和内存的紧凑性。在执行每个块的计算之后,结果将存储到out参数中,否则它必须分配与输入相同大小的数组。

查看Why It Works部分有关numexpr如何评估向量化算术的伪代码。