2013-04-28 94 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])