1
votes

Python: Trouvez l'index des plus grandes valeurs Top-n dans List ou numpy.ndarray

Par exemple:
a = [1,5,6,2,3]

result = most_find(a, 3)

reslut
[2,1,4]  # the index of 6, 5, 3 in a

Je sais implémenter cette fonction de manière complexe ....

Ma question

Y a-t-il des fonction intégrée en Python ou numpy pour y faire face?


4 commentaires

Est-ce que cela répond à votre question? Comment obtenir des indices de N valeurs maximales dans un tableau NumPy?


Ouais, merci! C'est une façon simple de travailler


S'il s'agit déjà d'un tableau numpy , alors le argsort ou argpartition lié ​​devrait être le plus rapide. Mais s'il s'agit d'une liste, une méthode de tri par liste est probablement meilleure.


@hpaulj, d'accord, je comprends! Merci. Je pensais à cette question, la manière directe peut-être mieux


3 Réponses :


1
votes

Il existe un intégré lié par Sushanth mais vous pouvez également l'implémenter comme ceci: sorted (range (len (a)), key = lambda i: -a [i]) [: 3] < / code>


0 commentaires

1
votes

Trier l'index par valeur,

def most_find(sequence, n):
    lst = sorted(range(len(sequence)), key=lambda x:sequence[x], reverse=True)
    return lst[:n]

a = [1, 5, 6, 2, 3]
result = most_find(a, 3)

print(result)


0 commentaires

0
votes

Existe-t-il une fonction intégrée en Python ou numpy pour y faire face?

En fait, il y en a! Il s'appelle numpy.argsort () a>:

[2 1 4]

Résultat:

import numpy as np

a = [1, 5, 6, 2, 3]

print(np.array(a).argsort()[-3:][::-1]) # If you want to list the indexes of the 4 greatest numbers, change the -3 to -4, etc.

0 commentaires