2012-09-29 146 views
2

a是一個numpy數組,a.T是轉置。一旦我將aa.T添加爲a += a.T,就不會有答案。有誰能告訴我爲什麼?謝謝。numpy奇怪的東西

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.]]) 

回答

8

注意a.Ta僅一個視圖,這意味着它們保持相同的數據。現在:

a += a.T 

到位添加a.Ta,但在這樣做,(在相同的數據a.T點)改變a.T。由於訪問a的順序是一個比較複雜的,失敗(和你不應該相信的結果是可再現的,因爲當你改變np.setbufsize它會改變。

爲了避免這兩個會的工作,雖然第一個版本看起來比較清潔

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

謝謝,它的工作原理! – waitingkuo