为什么使用numpy.ndarrays添加和赋值(+ =)表现奇怪?

Mar*_*ius 1 python arrays numpy

考虑以下Python代码:

import numpy

a = numpy.random.rand(3,4)
b = numpy.random.rand(3,4)

c = a
c += b

c/2. - (a + b)/2.
Run Code Online (Sandbox Code Playgroud)

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

d = a
d = d + b

d/2. - (a + b)/2.
Run Code Online (Sandbox Code Playgroud)

然后结果为0,如预期的那样.这看起来很奇怪,任何人都可以解释一下这种行为吗?使用+=, /=, ...numpy数组是否明智?谢谢!

(这只是一个最小的例子,我必须添加几个数组.)

eic*_*erg 9

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

操作c=a使c点完全相同的数据a.做c += b也增加ba.

该操作d = ad指出了a.但随后d = d + b在内存中分配了一个新的位置d + b,然后引用d了这个新的位置.

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

请参阅此处获取教程,并在此处查看深入的问题.