【问题标题】:Slice a 3D numpy array by a list of indices通过索引列表切片 3D numpy 数组
【发布时间】:2017-07-03 10:07:33
【问题描述】:

我似乎无法弄清楚如何对数组进行切片,以便获得第 3 维中感兴趣的索引。这是一个示例 3D numpy 数组。

data = np.arange(60).reshape(5,4,3)  
print data

[[[ 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]   [27 28 29]   [30 31 32]   [33 34 35]]

 [[36 37 38]   [39 40 41]   [42 43 44]   [45 46 47]]

 [[48 49 50]   [51 52 53]   [54 55 56]   [57 58 59]]]

现在这里是我想从第三维获取的索引。

indices_of_interest = np.random.randint(3, size=5) 打印indices_of_interest

[0 2 2 2 0]

所以基本上我想要价值观

[[[ 0] [ 3] [ 6] [ 9]]

[[14] [17] [20] [23]]

[[26] [29] [32] [35]]

[[38] [41] [44] [47]]

[[48] [51] [54] [57]]]

有没有办法做到这一点?当我尝试直接索引数组时,它会广播维度而不是向我提供数据的子集。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    我们可以使用advanced-indexing抓住它们到第三个暗点 -

    data[np.arange(len(indices_of_interest)),:, indices_of_interest]
    

    示例运行 -

    In [65]: data = np.arange(60).reshape(5,4,3)
    
    In [66]: indices_of_interest = [0,2,2,2,0]
    
    In [67]: data[np.arange(len(indices_of_interest)),:, indices_of_interest]
    Out[67]: 
    array([[ 0,  3,  6,  9],
           [14, 17, 20, 23],
           [26, 29, 32, 35],
           [38, 41, 44, 47],
           [48, 51, 54, 57]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      相关资源
      最近更新 更多