numpy中奇怪的东西

时间:2012-09-29 18:13:49

标签: python numpy linear-algebra

a是一个numpy数组,而a.T是它的转置。将aa.T添加为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.]])

1 个答案:

答案 0 :(得分:8)

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

 a += a.T

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

为了避免这一点,这两个都可行,但第一个版本对我来说似乎更清晰。

a = a + a.T
a += a.T.copy()