在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.])

最佳答案

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

请查看Why It Works部分以获取有关numexpr如何评估矢量化算术的伪代码。

09-20 04:42