为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2021-11-30 16:57:34
如果我有以下 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]),) +  indmat[new_ind][ 7 16 25]但我想知道是否有办法做到这一点,不需要显式构建新索引?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您确实需要构造一个新的索引元组:


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


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信