理解numpy中的内存分配:将操作结果存储到变量[:,:]时是否分配了“临时”内存?

2024-04-23 18:02:03 发布

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

假设两个大的多维numpy数组ab。我想执行元素操作,例如,逐个元素添加它们:

c = a + b

在上述情况下,为a + b的结果分配新的内存。然后,对该内存的引用存储在c。你知道吗

现在,假设已经为c分配了内存。为了得到一个简单的示例,我将维度数设置为2,可以执行以下操作:

c[:, :] = a + b

我找不到任何关于如何准确执行上述内容的文档。我可以想象两种方式:

  1. 首先,分配内存来执行操作a + b。在数据即操作结果被复制到c[:, :]之前,结果被存储到这个“临时”存储器中。你知道吗
  2. 没有分配临时内存。a + b的结果直接进入c[:, :]。你知道吗

我玩了一些代码-我可能完全错了-从性能角度看,第一种选择更有可能。我说得对吗?如果是这样,我如何避免分配“临时内存”并将结果直接存储到c中已有的内存中?我想我必须更加明确,使用像numpy.add这样的函数,并向它们提供对目标内存的引用。你知道吗


Tags: 数据内存代码文档numpy元素示例内容
1条回答
网友
1楼 · 发布于 2024-04-23 18:02:03

你要找的手术是

numpy.add(a, b, out=c)

对于c[:, :] = a + ba + b的求值没有关于结果将被分配给c[:, :]的信息。它必须分配一个新数组来保存a + b的结果。你知道吗

(NumPy的最新版本确实尝试执行一些C-level stack inspection来积极地优化临时性,超出Python执行模型通常允许的范围,但是这些优化不能处理这种情况。您可以在^{}中看到代码,包括一些关于它在什么平台上工作以及为什么Python堆栈检查不够的注释。)

相关问题 更多 >