A resposta de @steve é realmente a maneira mais elegante de fazer isso.
Para a maneira "correta", consulte o argumento da palavra-chave da ordem numpy.ndarray.sort
No entanto, você precisará visualizar sua matriz como uma matriz com campos (uma matriz estruturada).
A maneira "correta" é muito feia se você não definiu inicialmente sua matriz com campos ...
Como um exemplo rápido, para classificá-lo e retornar uma cópia:
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 classificá-lo no local:
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 é a maneira mais elegante de fazê-lo, tanto quanto eu sei ...
A única vantagem desse método é que o argumento "order" é uma lista dos campos para ordenar a pesquisa. Por exemplo, você pode classificar pela segunda coluna, depois pela terceira coluna e depois pela primeira coluna, fornecendo a ordem = ['f1', 'f2', 'f0'].
np.sort(a, axis=0)
seria uma solução satisfatória para a matriz especificada. Sugeri uma edição com um exemplo melhor, mas fui rejeitada, embora, na verdade, a questão seja muito mais clara. O exemplo deve ser algo comoa = numpy.array([[1, 2, 3], [6, 5, 2], [3, 1, 1]])
com saída desejadaarray([[3, 1, 1], [1, 2, 3], [6, 5, 2]])