2013-04-28 380 views
2

我有一個多維陣列NumPy的:索引多維數組以與陣列

In [1]: m = np.arange(1,26).reshape((5,5)) 

In [2]: m 
Out[2]: 
array([[ 1, 2, 3, 4, 5], 
     [ 6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15], 
     [16, 17, 18, 19, 20], 
     [21, 22, 23, 24, 25]]) 

和另一個數組p = np.asarray([[1,1],[3,3]])。我想p作爲指標對m一個陣列,即:

m[p] 
array([7, 19]) 

但是我得到:

In [4]: m[p] 
Out[4]: 
array([[[ 6, 7, 8, 9, 10], 
     [ 6, 7, 8, 9, 10]], 

     [[16, 17, 18, 19, 20], 
     [16, 17, 18, 19, 20]]]) 

我怎樣才能使用pm所需分得一杯羹?

+0

等等......嗯......什麼? – 2013-04-28 08:07:55

回答

3

Numpy正在使用您的數組僅索引第一個維度。作爲一般規則,多維數組的索引應該在一個元組中。這將讓你更接近一點,你想要什麼:

>>> m[tuple(p)] 
array([9, 9]) 

但現在你已經有兩次1索引的第一個維度,並用3到索引中的第一維用1和3第二名的兩倍,然後第二個1和3也可以轉置您的陣列:

>>> m[tuple(p.T)] 
array([ 7, 19])