Trier un tableau selon deux colonnes

Résolu/Fermé
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 - 23 avril 2014 à 15:23
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 - 23 avril 2014 à 19:00
Bonjour,

J'ai un tableau numérique
numpy
que je veux trier selon deux colonne.
Le tri doit être fait par rapport à une première colonne, puis par rapport à une deuxième.
La méthode
sort
de numpy permet de faire des opérations de tri, mais pas selon deux colonnes, à moins d'utiliser l'argument
order
, ce qui impose d'avoir des tableaux structurés.

Je me demande s'il y a moyen de le faire (bien évidement, sans passer par les boucles, sinon, on perd de performance).

Je vous remercie d'avance,
A voir également:

2 réponses

Utilisateur anonyme
23 avril 2014 à 18:25
Difficile de tout comprendre, mais la documentation indique comment trier selon deux colonnes.
1
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
23 avril 2014 à 18:50
Ce que vous proposez répond bien à la question, merci :)
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
23 avril 2014 à 19:00
Bonjour,

Fred propose d'utiliser
numpy.lexsort
. Ce qui répond bien à la question.

Voici un exemple d'utilisation :
# On crée un tableau (30x2) d'entiers aléatoires compris entre 0 et 99
a = np.random.randint(100, size=(30, 2))
# idx contient les indices du tri du tableau a selon la première
# colonne, puis selon la seconde.
# C'est le même principe de numpy.argsort
idx = np.lexsort((a[:, 1], a[:, 0],))
# a[idx] est le tableau trié
res = a[idx]

J'ai mis cet exemple car celui contenu dans la documentation est très basique fait appliqué à des chaînes de caractères.
0