76 votes

Trier les lignes du tableau par un autre tableau en Python

J'essaie de trier les lignes d'un tableau par les valeurs d'un autre. Par exemple:

 import numpy as np
arr1 = np.random.normal(1, 1, 80)
arr2 = np.random.normal(1,1, (80,100))

Je veux trier arr1 par ordre décroissant et conserver la relation actuelle entre arr1 et arr2 (c'est-à-dire qu'après avoir trié les deux, la ligne de arr1[0] et arr2[0, :] est la même ).

117voto

keflavich Points 2310

Utilisez argsort comme suit :

 arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]

Cet exemple trie par ordre décroissant.

14voto

mklauber Points 565

Utilisez la fonction zip : zip( *sorted( zip(arr1, arr2) ) ) Cela fera ce dont vous avez besoin.

Maintenant l'explication : zip(arr1, arr2) combinera les deux listes, vous avez donc [(0, [...list 0...]), (1, [...list 1...]), . ..] Ensuite, nous exécutons sorted(...) , qui par défaut trie en fonction du premier champ du tuple. Ensuite, nous exécutons à nouveau zip(...) , qui prend les tuples de triés et crée deux listes, à partir du premier élément du tuple (de arr1) et du deuxième élément (de arr2).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X