numpy中奇怪的东西

wai*_*kuo 2 python numpy linear-algebra

a是一个numpy数组,a.T它是转置.一旦我添加aa.Tas a += a.T,答案是不期望的.谁能告诉我为什么?谢谢.

import numpy 

a = numpy.ones((100, 100))
a += a.T
a

array([[ 2.,  2.,  2., ...,  2.,  2.,  2.],
       [ 2.,  2.,  2., ...,  2.,  2.,  2.],
       [ 2.,  2.,  2., ...,  2.,  2.,  2.],
       ..., 
       [ 3.,  3.,  3., ...,  2.,  2.,  2.],
       [ 3.,  3.,  3., ...,  2.,  2.,  2.],
       [ 3.,  3.,  3., ...,  2.,  2.,  2.]])
Run Code Online (Sandbox Code Playgroud)

seb*_*erg 8

请注意,这a.T只是一个视图a,这意味着它们拥有相同的数据.现在:

 a += a.T
Run Code Online (Sandbox Code Playgroud)

添加a.T到位a,但在执行此操作时,会更改a.T(作为a.T相同数据的点).由于访问顺序a有点复杂,因此失败(您不应该相信结果是可重现的,因为它会在您更改时发生变化np.setbufsize.

为了避免它,这两个都可以工作,虽然第一个版本对我来说似乎更干净.

a = a + a.T
a += a.T.copy()
Run Code Online (Sandbox Code Playgroud)