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?

Vous avez besoin d'utiliser 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. @Swier
Ou 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