web-dev-qa-db-fra.com

Comment trier un tableau 2D (numpy.ndarray) en fonction de la deuxième colonne en python?

J'essaie de convertir tous mes codes en Python. Je veux trier un tableau qui a deux colonnes de sorte que le tri doit être basé sur la deuxième colonne dans l'ordre croissant. Ensuite, je dois additionner les données de la première colonne (de la première ligne à, par exemple, la 100e ligne). J'ai utilisé "Data.sort (axis = 1)", mais cela ne fonctionne pas. Quelqu'un at-il une idée pour résoudre ce problème?

20
Sam

Utilisez .argsort() il retourne un numpy.array D'indices qui trient le numpy.array Donné. Vous l'appelez en tant que fonction ou méthode sur votre tableau. Par exemple, supposons que vous ayez

import numpy as np

arr = np.array([[-0.30565392, -0.96605562],
                [ 0.85331367, -2.62963495],
                [ 0.87839643, -0.28283675],
                [ 0.72676698,  0.93213482],
                [-0.52007354,  0.27752806],
                [-0.08701666,  0.22764316],
                [-1.78897817,  0.50737573],
                [ 0.62260038, -1.96012161],
                [-1.98231706,  0.36523876],
                [-1.07587382, -2.3022289 ]])

Vous pouvez maintenant appeler .argsort() sur la colonne que vous souhaitez trier, et cela vous donnera un tableau d'index de lignes qui trient cette colonne particulière que vous pouvez passer en tant qu'index à votre tableau d'origine.

>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])

Vous pouvez utiliser de manière équivalente numpy.argsort()

>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])
43
JaminSore

sorted(Data, key=lambda row: row[1]) devrait le faire.

4
a p