考虑以下 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 引用到这个新位置。
如您所见,差异非常重要!对于许多算法,您可以利用这些属性中的任何一个来提高效率,但始终需要谨慎。
