Skip to main content
 首页 » 编程设计

python之为什么添加和分配 (+=) 与 numpy.ndarrays 行为异常

2025年05月04日10dflying

考虑以下 Python 代码:

import numpy 
 
a = numpy.random.rand(3,4) 
b = numpy.random.rand(3,4) 
 
c = a 
c += b 
 
c/2. - (a + b)/2. 

最后一行的结果不是零数组。但是,如果我这样做:

d = a 
d = d + b 
 
d/2. - (a + b)/2. 

那么结果就是0,符合预期。这对我来说很奇怪,有人可以解释这种行为吗?对 numpy 数组使用 +=,/=, ... 是否明智?谢谢!

(这只是一个最小的例子,我必须把几个数组加起来。)

请您参考如下方法:

操作+=就位。这意味着它会在您的第一个示例中更改数组 a 的内容!

操作c=a 使c 指向与a 完全相同的数据。执行 c += b 还会将 b 添加到 a。

操作d = a 也使d 指向a。但是 d = d + b 将内存中的一个新位置分配给 d + b,然后将 d 引用到这个新位置。

如您所见,差异非常重要!对于许多算法,您可以利用这些属性中的任何一个来提高效率,但始终需要谨慎。

参见 here教程和 here对于一个深入的 SO 问题。