从 numpy 数组中获取前 N 个排名索引和值

问题描述 投票:0回答:4

我有一个如下所示的 numpy 数组

values = [0.1, 0.9, 0.8, 0.65, 0.2, 0.7]

我需要知道最高值的值和索引,我可以通过...

int(np.argmax(values))
max(values)

...但是我还需要知道数组中的第二高值和第三高值并相应地保留索引。如何修改代码来获取这些值?

python numpy ranking
4个回答
4
投票

您可以使用

np.argsort
,它为您提供最大数字的索引。

indices = np.argsort(values)[::-1]
print(indices)

[::-1]
反转列表,这是必要的,因为
argsort
按升序返回索引。这给出:

[1, 2, 5, 3, 4, 0]

然后就可以使用了

values[indices[n]]

检索第

n
个最大值。


2
投票

只需删除最高值,然后使用

int(np.argmax(values))


1
投票
np.argsort(values)

退货

array([0, 4, 3, 5, 2, 1])

1
投票

方法 1 - 使用 python 列表:

values = [0.1, 0.9, 0.8, 0.65, 0.2, 0.7]
#Create a copy of the list
vals = values[:]
print(vals)
for i in range(len(vals)):
    m = max(vals)
    print(i+1,'-',values.index(m),'-',m)
    vals.remove(m)

方法 2 - 使用 numpy,如 piripiri 所解释:

import numpy as np
indices = np.argsort(values)[::-1]
print(indices)

for i in range(len(values)):
    print(i+1,'-',indices[i],'-',values[indices[i]])
© www.soinside.com 2019 - 2024. All rights reserved.