20

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

1 回答 1

8

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

查看numexpr 如何评估矢量化算术的伪代码部分为什么它有效。

于 2013-03-22T02:52:50.037 回答