La réponse de @steve est en fait la manière la plus élégante de le faire.
Pour la manière "correcte", voir l'argument du mot clé order de numpy.ndarray.sort
Cependant, vous devrez voir votre tableau comme un tableau avec des champs (un tableau structuré).
La façon "correcte" est assez moche si vous n'avez pas défini initialement votre tableau avec des champs ...
Comme exemple rapide, pour le trier et renvoyer une copie:
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])
In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
Pour le trier sur place:
In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None
In [7]: a
Out[7]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
@ Steve est vraiment la façon la plus élégante de le faire, autant que je sache ...
Le seul avantage de cette méthode est que l'argument "order" est une liste des champs par lesquels ordonner la recherche. Par exemple, vous pouvez trier par la deuxième colonne, puis la troisième colonne, puis la première colonne en fournissant order = ['f1', 'f2', 'f0'].
np.sort(a, axis=0)
serait une solution satisfaisante pour la matrice donnée. J'ai suggéré un montage avec un meilleur exemple mais j'ai été rejeté, bien qu'en réalité la question soit beaucoup plus claire. L'exemple devrait ressemblera = numpy.array([[1, 2, 3], [6, 5, 2], [3, 1, 1]])
à la sortie souhaitéearray([[3, 1, 1], [1, 2, 3], [6, 5, 2]])