@steve «s ответ на самом деле самый элегантный способ сделать это.
Для «правильного» способа смотрите аргумент порядка ключевых слов numpy.ndarray.sort
Тем не менее, вам нужно будет просматривать ваш массив как массив с полями (структурированный массив).
«Правильный» способ довольно уродлив, если вы изначально не определяли свой массив с полями ...
В качестве быстрого примера, чтобы отсортировать его и вернуть копию:
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]])
Чтобы отсортировать на месте:
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]])
@ Насколько мне известно, Стив - самый элегантный способ сделать это ...
Единственное преимущество этого метода заключается в том, что аргумент «порядок» - это список полей, по которым нужно упорядочить поиск. Например, вы можете отсортировать по второму столбцу, затем по третьему столбцу, затем по первому столбцу, указав order = ['f1', 'f2', 'f0'].
np.sort(a, axis=0)
это было бы удовлетворительным решением для данной матрицы. Я предложил редактирование с лучшим примером, но был отклонен, хотя на самом деле вопрос был бы гораздо более понятным. Пример должен быть примерно такимa = numpy.array([[1, 2, 3], [6, 5, 2], [3, 1, 1]])
с желаемым результатомarray([[3, 1, 1], [1, 2, 3], [6, 5, 2]])