首页 > 解决方案 > numpy 获取特定值的索引,发生在给定索引之后

问题描述

我得到了以下 numpy 数组

print(data)

Out: array([[[94 32 63]
  [56 19 48]
  [29 11 45]
  [15 29 33]]

 [[60 16 57]
  [26 36 62]
  [29 56 88]
  [96 66 75]]

 [[83 52 66]
  [28  9 95]
  [88 86 69]
  [26 78 56]]

 [[84 29 98]
  [83  0 38]
  [87 11 71]
  [27 51 37]]

 [[11 25  5]
  [19 10 13]
  [ 8 21  3]
  [ 7  5  1]]])

我想找到沿轴 0 的最接近最大值 50% 的值(在哪个索引处),这里的值decay_value

max_value = np.max(data, axis=0)
threshold_decay = 0.5
decay_value = max_value*threshold_decay

但我想在(在较高位置)最大值的位置之后在数组的切片中搜索它

所以基本上在index下面表示的值之后

index = np.argmax(data, axis=0)
print (index)

Out:array([[0 2 3]
           [3 1 2]
           [2 2 1]
           [1 2 1]])

下面的代码允许我获得最接近的值的位置,threshold_decay 但当然这可能发生在任何索引位置,甚至在最大值的索引之前(在较低位置)。

difference_dummy = np.absolute(data - decay_value)
index_decay = np.argmin(data, axis=0)
print(index_decay)

Out: array([[4, 1, 4],
            [4, 3, 4],
            [4, 0, 4],
            [4, 4, 4]])

确实,我正在查看的结果如下

Out: array([[4, 4, 4],
            [4, 3, 4],
            [4, 4, 4],
            [4, 4, 4]])

由于我正在使用的矩阵可能非常大,我将不胜感激任何没有循环的pythonic解决方案

标签: pythonnumpy

解决方案


推荐阅读