2017-02-27 57 views
1

我有一個數組爲:Python的陣列形狀差異

A 
Out[159]: 
array([[ 1, 2, 3, 4, 5, 6, 7, 8], 
     [ 2, 4, 6, 8, 10, 12, 14, 16]]) 

現在,如果我找到的形狀:

A[0:1].shape 
Out[150]: (1, 8) 

雖然,如果我嘗試同爲

A[ [0,0,1,1], [0,3,2,5] ].shape 
Out[151]: (4,) 

第一個數組似乎是1行8列,第二個數組似乎是1行和4列,那麼爲什麼第二個答案顯示爲(4)而不是(1,4)?

回答

1

第二種情況並不意味着你認爲它的含義。

這種花式索引的在numpy的工作方式如下:如果A是2dim陣列和I1 = [a1, a2, ...]I2 = [b1, b2, ...]是陣列/整數的列表,這個索引:

A[I1,I2] 

指:

np.array([ A[a1,b1], A[a2,b2], A[a3,b3], ... ]) 

I1是指沿着dim = 0的索引,而I2是指沿着dim = 1的對應索引。這意味着每個[a_k, b_k]對定義了一個要包含在切片數組中的單個元素。


另一種方式來想一想:想想通過np.where返回的元組,你期待什麼這意味着:

A[np.where(A == x)] 
+0

但後來什麼呢'出[151]:(4) 「其實是? – Sarang

+0

@Sarang它意味着一個大小爲4的1dim數組。因爲在你的情況下'len(I1)== len(I2)== 4',你可以從'A'中選擇4個元素 – shx2