使用另一个3D数组索引到3D数组的最后一个轴

时间:2016-08-29 09:14:27

标签: python arrays numpy

如果我有一个数组 x ,其值如下所示(2,3,4)

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]]])

我有一个索引数组 y ,其形状为(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] ,它不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用fancy-indexing -

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