【问题标题】:Getting the minimum indexes with numpy Python使用 numpy Python 获取最小索引
【发布时间】:2021-01-30 03:54:08
【问题描述】:

我正在尝试获取函数的索引值。但我想得到最小值而不是最大值,就像帖子一样:post。我试图将下面的函数转换为最小值,而不是最大值来获取索引。

最大值:

a = numpy.array([11, 2, 33, 4, 5, 68, 7])
b = numpy.array([0, 4])
min = numpy.minimum.reduceat(a,b)

索引函数

def numpy_argmin_reduceat_v2(a, b):
    n = a.min()+1  # limit-offset
    id_arr = np.zeros(a.size,dtype=int)
    id_arr[b[1:]] = 1
    shift = n*id_arr.cumsum()
    sortidx = (a+shift).argsort()
    grp_shifted_argmin = np.append(b[1:],a.size)-1
    return sortidx[grp_shifted_argmin] - b

【问题讨论】:

标签: python arrays function numpy vector


【解决方案1】:

至少,您需要每个组中的第一项,而不是最后一项。这是通过修改grp_shifted_argmin来实现的:

def numpy_argmin_reduceat_v2(a, b):
    n = a.max() + 1  # limit-offset
    id_arr = np.zeros(a.size,dtype=int)
    id_arr[b[1:]] = 1
    shift = n*id_arr.cumsum()
    sortidx = (a+shift).argsort()
    grp_shifted_argmin = b
    return sortidx[grp_shifted_argmin] - b

这会正确返回每个子列表中最小值的索引:

a = numpy.array([11, 2, 33, 4, 5, 68, 7])
b = numpy.array([0, 4])
print(numpy_argmin_reduceat_v2(a, b))
# [1 0]

print([np.argmin(a[b[0]:b[1]]), np.argmin(a[b[1]:])])
# [1, 0]

【讨论】:

  • 抱歉,如果列表是随机的,我更新了详细信息。我想获得两个索引之间的最小值。
  • 这正是这个函数的作用;请参阅我添加到答案中的示例。
  • 嘿,几个月前你已经回答了我的问题,你能看看这个帖子吗:stackoverflow.com/questions/67680199/…。它与这个问题有关。
猜你喜欢
  • 2021-08-13
  • 2021-08-16
  • 2022-07-21
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 2019-04-14
相关资源
最近更新 更多