2

a是一个 numpy 数组,a.T它是转置的。一旦我添加了aand a.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.]])
4

1 回答 1

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()
于 2012-09-29T18:21:56.457 回答