2016-04-02 10 views
0

後でない多次元配列から特定の値を抽出する必要があります。私に与えるインデックスを使用して値の配列を抽出する

A[0,2,:] 
A[1,1,:] 
A[2,1,:] 

のでbasicly行B = [2,1,1]、::

[-0.4   4.8   0.  ] 
[ 2.11538462 4.42307692 0.  ] 
[ 3.17307692 4.63461538 0.  ] 
私は、次の要素例えば任意の行

を抽出したいすべての4x3のブロックについては

import numpy as np  
A = np.array([[[ 0.,   4.,   0.  ], 
       [ 0.19230769, 4.03846154, 0.  ], 
       [-0.4,   4.8,   0.  ], 
       [ 2.,   1.,   0.  ]], 

       [[ 1.2,   3.4,   0.  ], 
       [ 2.11538462, 4.42307692, 0.  ], 
       [ 0.,   4.,   0.  ], 
       [ 3.6,   1.8,   0.  ]], 

       [[ 1.8,   3.1,   0.  ], 
       [ 3.17307692, 4.63461538, 0.  ], 
       [ 0.,   4.,   0.  ], 
       [ 4.,   2.,   0.  ]]]) 

これを効率的に行うにはどうすればよいですか?

答えて

2

あなたは"advanced indexing"使用することができる:

インデクシングアレイは

ind1 = [0, 1, 2] 
ind2 = [2, 1, 1] 

ind1ので、第2の軸をインデックスされAind2の第一の軸をインデックスされ、第3の軸であるここ

In [99]: A[[0,1,2], [2,1,1], :] 
Out[99]: 
array([[-0.4  , 4.8  , 0.  ], 
     [ 2.11538462, 4.42307692, 0.  ], 
     [ 3.17307692, 4.63461538, 0.  ]]) 

が完全にスライスされると(:)、結果の配列resultは、ind1およびと同じ形状です210 - つまり、(3,) - 完全にスライスされた軸の形状に加えて、(3,)です。したがって、result.shape(3, 3)i = 0,1,2j = 0,1,2ため

result[i, j] = A[ind1[i], ind2[i], j] 

あります。

関連する問題