2016-08-29 140 views
1

如果我有一個數組X,其值作爲遵循形狀(2,3,4)索引到一個3D陣列與另一3D陣列的最後一個軸

array([[[ 0.15845319, 0.57808432, 0.05638804, 0.56237656], 
     [ 0.73164208, 0.80562342, 0.64561066, 0.15397456], 
     [ 0.34734043, 0.88063258, 0.4863103 , 0.09881028]], 

     [[ 0.35823078, 0.71260357, 0.49410944, 0.94909165], 
     [ 0.02730397, 0.67890392, 0.74340148, 0.47434223], 
     [ 0.02494292, 0.59827256, 0.20550867, 0.30859339]]]) 

和我有索引陣列ÿ,其形狀爲(2,3,3),值是:

array([[[0, 2, 2], 
     [2, 0, 2], 
     [0, 0, 2]], 

     [[1, 2, 1], 
     [1, 1, 1], 
     [1, 2, 2]]]) 

所以我可以使用X [0,0,Y [0] [0]]索引數組X,它會產生輸出如下:

array([ 0.15845319, 0.05638804, 0.05638804]) 

我的問題是:是否有任何簡單的方法來做這個?我已經嘗試過 x [y],它沒有工作。

+0

寫一個小函數來實現的縮寫? – Ronald

+0

我想以簡單的方式做到這一點,而不是功能,只是看起來像我在這裏發佈的問題(http://stackoverflow.com/questions/39118401/slice-operation-for-numpy-in-python2)。 –

回答

1

你可以使用fancy-indexing -

m,n = y.shape[:2] 
out = x[np.arange(m)[:,None,None],np.arange(n)[:,None],y] 
+0

非常好的答案,謝謝Divakar –