我遇到了一些在我看來像在Numpy切片中不一致的行爲。具體地,請考慮下面的例子:在numpy數組中看似不一致的切片行爲
import numpy as np
a = np.arange(9).reshape(3,3) # a 2d numpy array
y = np.array([1,2,2]) # vector that will be used to index the array
b = a[np.arange(len(a)),y] # a vector (what I want)
c = a[:,y] # a matrix ??
我想獲得載體中,使得第i個元素是a[i,y[i]]
。我嘗試了兩件事(上面的b
和c
),並且很驚訝b
和c
不一樣......實際上一個是矢量,另一個是矩陣!我的印象是,:
是「所有元素」的縮寫,但顯然它的含義更加微妙。
試錯後,我現在有點(b == np.diag(c)
)理解上的差異,但希望在爲什麼它們是不同的,究竟採用:
意味着,以及如何瞭解什麼時候使用這兩種情況下澄清。
謝謝!
爲什麼你認爲這是不一致的? –
不一致,因爲在我以前使用Python時,我被訓練認爲':'是指「所有元素」。當我索引數組時,我期望'myArr [:]'和'myArr [np.arrage(len(myArr))]'產生相同的結果。它確實如此,所以當我沒有把它推廣到幾個維度時,我感到很驚訝。 – Charles
@BradSolomon我知道他們會產生同樣的結果,這就是爲什麼我期望':'與'np.arange(len(a))':)意思相同。它在一維中執行,但不是在兩個或兩個以上 – Charles