numexpr.evaluate( "A + B",出= A)

Dav*_*vid 18 python numpy numexpr

在python numexpr中安全地将值分配给您正在操作的同一个数组以避免创建临时数组吗?

项目主页上的内存使用描述看起来没问题,但没有深入到源代码中,这几乎不是一个可靠的答案.

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

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.])
Run Code Online (Sandbox Code Playgroud)

mta*_*add 7

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

查看" 为什么它适用于伪代码"部分,了解numexpr如何评估向量化算术.