使用numpython获取最小索引

2024-09-27 07:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到函数的索引值。但是我想得到的是最小值,而不是最大值,就像post: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

Tags: 函数numpyidsizeshiftnpminpost
1条回答
网友
1楼 · 发布于 2024-09-27 07:20:39

至少,您需要每组中的第一项,而不是最后一项。这是通过修改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]

相关问题 更多 >

    热门问题