Comment trier dans l'ordre décroissant avec numpy?
J'ai un tableau numpy comme ceci:
A = array([[1, 3, 2, 7],
[2, 4, 1, 3],
[6, 1, 2, 3]])
Je voudrais trier les lignes de cette matrice dans l'ordre décroissant, et obtenez les arguments de la triées de la matrice comme ceci:
As = array([[3, 1, 2, 0],
[1, 3, 0, 2],
[0, 3, 2, 1]])
Je n'ai suivantes:
import numpy
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]])
As = numpy.argsort(A, axis=1)
Mais cela me donne le tri dans l'ordre croissant. Aussi, après avoir passé un peu de temps pour chercher une solution sur internet, je pense qu'il doit y avoir un argument pour argsort
fonction de numpy qui permettrait d'inverser l'ordre de tri. Mais, apparemment il n'existe pas un tel argument! Pourquoi!?
Il y a un argument appelé order
. J'ai essayé, en devinant, numpy.argsort(..., order=reverse)
mais il ne fonctionne pas.
J'ai cherché une solution dans les questions précédentes ici et j'ai trouvé que je peux le faire:
import numpy
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]])
As = numpy.argsort(A, axis=1)
As = As[::-1]
Pour une raison quelconque, As = As[::-1]
ne me donne pas le résultat souhaité.
Bien, je suppose que ça doit être simple mais je suis en manque de quelque chose.
Comment trier un tableau numpy dans l'ordre décroissant?
np.argsort(A, axis=1)[:, ::-1]
. En utilisant simplement [::-1]
inverse de l'axe 0: vous souhaitez inverser l'axe 1.Ai-je raison de penser que
As
n'est pas la version triée de A
dans votre top exemple, mais la version triée d'une matrice différente?C'est l'argument de la version triée de
A
. @SwierOu deux hackish moyens :
np.argsort(-A, axis=1)
et A.shape[1] -1 - np.argsort(A, axis=1)
.Il n'y a pas
reverse
option dans NumPy est sort
ou argsort
les fonctions, car l'inversion d'une matrice est tellement efficace (elle change juste les foulées, pas de données doivent être copiées). Une solution via le tri -A
, mais qui crée deux nouveaux tableaux au lieu d'un. Pour les grands tableaux ce n'est pas grand.OriginalL'auteur Ribz | 2016-03-28
Vous devez vous connecter pour publier un commentaire.
Il suffit de multiplier votre matrice par -1 pour inverser l'ordre:
OriginalL'auteur Swier