Trier en utilisant argsort en python
J'essaie de trier un tableau:
import numpy as np
arr = [5,3,7,2,6,34,46,344,545,32,5,22]
print "unsorted"
print arr
np.argsort(arr)
print "sorted"
print arr
Mais la sortie est:
unsorted
[5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
sorted
[5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
La matrice n'a pas de changement à tous les
De telles choses sont consultables en 1 minute dans les docs: docs.scipy.org/doc/numpy/reference/generated/numpy.argsort.html 1. Il renvoie les indices des éléments triés. 2. Il ne se fait pas en place, mais renvoie nouveau tableau.
Utilisation
Utilisation
arr.sort()
en cours de tri.OriginalL'auteur user2958912 | 2013-11-06
Vous devez vous connecter pour publier un commentaire.
Il y a deux problèmes ici; l'un est que
np.argsort
retourne un tableau de la indices qui permettrait de trier le tableau d'origine, la seconde est qu'il ne modifie pas le tableau d'origine, vous donne un autre. Cette session interactive devrait aider à expliquer:Ci-dessus, le
[3, 1, 0, ...]
signifie que l'élément3
dans votre liste devrait venir en premier (le2
), le point2
devrait venir (le3
), puis la première (indice est0
, le point est5
) et ainsi de suite. Notez quearr
est pas encore atteint:Vous ne pourriez pas besoin de ce tableau d'indices, et qu'ils trouvent plus facile de simplement utiliser
np.sort
:Mais cela laisse tout de même
arr
seul:Si vous voulez le faire à la place (modifier la version originale), utilisation:
np.sort(arr)
renvoie une copie du tableau trié plutôt que de tri en placeVrai, c'est ce que
arr.sort()
est pour, à la fin, depuisnp.sort(arr)
feuillesarr
lui-même seul.OriginalL'auteur askewchan
np.argsort
ne pas trier la liste en place, il renvoie une liste complète de indicies que vous êtes en mesure d'utiliser pour trier la liste.Vous devez affecter cette liste retournée à une valeur:
Alors, pour trier la liste avec ces indices, vous pouvez le faire:
indices = np.argsort(arr); arr[indices]
. Notez queargsort
n'est passort
C'est tout simplement un nom. OP pouvez le nommer comme il le souhaite 🙂
Vrai, désolé, je voulais dire ta première phrase, "np.argsort ne pas trier la liste en place, il renvoie une liste triée", Il renvoie les indices qui permettrait de trier une liste. Regardez ce que l'OP exemple retourne:
array([ 3, 1, 0, 10, 4, 2, 11, 9, 5, 6, 7, 8])
, je ne dirais pas triés.Je vous remercie. Je n'ai jamais complètement de travailler avec
numpy
, et je vais donc modifier ma réponseOriginalL'auteur TerryA
Essayer
la argsort réponse est l'indice de l'élément.
OriginalL'auteur Phil Cooper
Si vous voulez que votre tableau trié en place, vous voulez
arr.sort()
:OriginalL'auteur JoshAdel