La respuesta de @steve es en realidad la forma más elegante de hacerlo.
Para la forma "correcta", vea el argumento de palabra clave de orden de numpy.ndarray.sort
Sin embargo, deberá ver su matriz como una matriz con campos (una matriz estructurada).
La forma "correcta" es bastante fea si no definiste inicialmente tu matriz con campos ...
Como ejemplo rápido, para ordenarlo y devolver una copia:
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]])
Para ordenarlo en el lugar:
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 realmente es la forma más elegante de hacerlo, que yo sepa ...
La única ventaja de este método es que el argumento "ordenar" es una lista de los campos para ordenar la búsqueda. Por ejemplo, puede ordenar por la segunda columna, luego la tercera columna, luego la primera columna proporcionando orden = ['f1', 'f2', 'f0'].
np.sort(a, axis=0)
que sería una solución satisfactoria para la matriz dada. Sugerí una edición con un mejor ejemplo, pero fue rechazado, aunque en realidad la pregunta sería mucho más clara. El ejemplo debería ser algo así comoa = numpy.array([[1, 2, 3], [6, 5, 2], [3, 1, 1]])
con la salida deseadaarray([[3, 1, 1], [1, 2, 3], [6, 5, 2]])