2015-12-04 136 views
4

我覺得很愚蠢,因爲這是一件很簡單的事情,但我在這裏或其他任何地方都找不到答案。用另一個數組索引一個numpy數組

是否有沒有直接的方式索引一個numpy數組與另一個?

說我有一個2D陣列

>> A = np.asarray([[1, 2], [3, 4], [5, 6], [7, 8]]) 
array([[1, 2], 
    [3, 4], 
    [5, 6], 
    [7, 8]]) 

如果我想要訪問元素[3,1] I型

>> A[3,1] 
8 

現在,假設我該索引存儲在數組中

>> ind = np.array([3,1]) 

並嘗試使用此次索引:

>> A[ind] 
array([[7, 8], 
     [3, 4]]) 

結果不是A [3,1]

的問題是:具有陣列A和IND,什麼是獲得最簡單的方法[3,1]?

回答

3

只需使用一個元組:

>>> A[(3, 1)] 
8 
>>> A[tuple(ind)] 
8 

A[]實際調用特殊方法__getitem__

>>> A.__getitem__((3, 1)) 
8 

和使用一個逗號創建一個元組:

>>> 3, 1 
(3, 1) 

將這兩個基本的Python原則放在一起解決了您的問題。

如果您不需要NumPy數組功能,您可以首先將您的索引存儲在元組中。

+0

謝謝,這就是我期待的解決方案! –

3

這是因爲,通過給一個數組,你居然問

A[[3,1]] 

這給二維數組,而不是你想要的數組的第三個指標的第一指標的第三第一指標。

您可以使用

A[ind[0],ind[1]] 

您也可以使用(如果你想在同一時間多個索引);

A[indx,indy] 

indxindy是用於相應地將第一和第二維指標numpy的陣列。

在這裏看到的所有可能的索引方法numpy的數組:http://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html

相關問題