从numpy数组中获得排名

时间:2018-10-30 16:02:37

标签: python numpy

我有一个如下的numpy数组

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

我需要知道值和最高值的索引,然后我就知道了

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

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

4 个答案:

答案 0 :(得分:3)

您可以使用np.argsort,它会为您提供最大数字的索引。

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

[::-1]反转了列表,这是必要的,因为argsort以递增的顺序返回索引。这给出了:

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

然后您就可以使用

values[indices[n]]

检索第n个最大值。

答案 1 :(得分:1)

只需删除最大值,然后使用int(np.argmax(values))

答案 2 :(得分:1)

np.argsort(values)

返回

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

答案 3 :(得分: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-使用piripiri解释的numpy:

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]])