Numpy 索引 - 使用解散索引进行基本索引

如果我有以下 4D 数组:


mat = np.array(np.arange(27)).reshape((3,3,3))

[[[ 0  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 26]]]

以及以下解开索引:


ind = np.unravel_index([7], mat.shape[1:])

(array([2], dtype=int64), array([1], dtype=int64))

什么是最好的访问方式


mat[:, 2, 1]

[ 7 16 25]

使用解散索引?我正在寻找这个问题的通用解决方案,其中维度数量mat可能会有所不同。


我知道我可以做这样的事情:


new_ind = (np.arange(mat.shape[0]),) +  ind

mat[new_ind]

[ 7 16 25]

但我想知道是否有办法做到这一点,不需要显式构建新索引?


30秒到达战场
浏览 220回答 1
1回答

万千封印

您确实需要构造一个新的索引元组:In [8]: ind=np.unravel_index([7,8],(3,3))                                       In [9]: ind                                                                     Out[9]: (array([2, 2]), array([1, 2]))In [10]: (slice(None),*ind)                                                     Out[10]: (slice(None, None, None), array([2, 2]), array([1, 2]))In [11]: np.arange(27).reshape(3,3,3)[_]                                        Out[11]: array([[ 7,  8],       [16, 17],       [25, 26]])在Out[10]相当于添加:到您的拆开的指标:In [12]: np.s_[:,[2,2],[1,2]]                                                   Out[12]: (slice(None, None, None), [2, 2], [1, 2])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python