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?
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]])
sorted(Data, key=lambda row: row[1])
devrait le faire.