numexpr.evaluate号(“a+b”,输出=a)

2024-10-01 04:45:07 发布

您现在位置:Python中文网/ 问答频道 /正文

在pythonnumexpr中,将值赋给正在操作的同一个数组以避免创建临时数组是否安全?在

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

Tags: 方法内存答案importproject源代码asnp
1条回答
网友
1楼 · 发布于 2024-10-01 04:45:07

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

查看Why It Works部分,了解numexpr如何计算矢量化算法的伪代码。在

相关问题 更多 >