[英]Indexing 2d array with 2d array in Numpy
我有一個問題困擾了我幾天。 假設我們在 Numpy 中定義了一個二維數組:
x = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
我們還定義了一個用於索引的一維數組,比方說:
ind = np.array([2,1])
如果我們嘗試x[ind]
我們將得到:
array([[6, 7, 8],
[3, 4, 5]])
這很有意義: x
的第 2 行和第 1 行。
如果我們運行: x[:,ind]
我們將得到:
array([[2, 1],
[5, 4],
[8, 7]])
同樣,這很有意義 - 我們收到第 2 列,然后是第 1 列
現在我們將索引數組定義為 2d:
ind = np.array([[2,1],
[2,2]])
如果我們運行x[ind]
我們得到:
array([[[6, 7, 8],
[3, 4, 5]],
[[6, 7, 8],
[6, 7, 8]]])
同樣,這是有道理的——對於索引二維數組中的每一行,我們都會收到一個二維數組,它代表原始二維數組x
中的相應行。
但是,如果我們運行x[:,ind]
我們會收到下一個數組:
array([[[2, 1],
[2, 2]],
[[5, 4],
[5, 5]],
[[8, 7],
[8, 8]]])
我不明白這個 output 因為它返回索引行中的特定項目,但不是完整行。 我會假設,就像x[:,ind]
是一維數組時的情況一樣,我們將收到 2d arrays ,其中包括來自原始x
數組的原始列。
在索引數組的最后一種情況下:
print(ind)
array([[2, 1],
[2, 2]])
由於ind
是一個形狀為(2,2)
的2D
數組,並且您沿第一個軸取一個完整的切片,因此您將使用ind
在其每一行上沿A
的列進行索引。 因此,例如,通過使用ind
索引第二行[3, 4, 5]
,您將再次獲得索引2->5
、 1->4
、 2->5
和2->5
處的元素,結果形狀與ind
相同,因此[[5,4][5,5]]
。
它的每一行都相同,從而產生(3,2,2)
形狀的陣列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.