Как я могу отсортировать массив в NumPy энным столбцом?
Например,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
Я хотел бы отсортировать строки по второму столбцу, такому, что я возвращаюсь:
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
@steve на самом деле самый элегантный способ сделать это.
Чтобы узнать "правильный" способ, см. Аргумент ключевого слова order 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]])
@ Steve's действительно самый элегантный способ сделать это, насколько я знаю ...
Единственное преимущество этого метода состоит в том, что аргумент "порядок" представляет собой список полей для упорядочивания поиска к. Например, вы можете отсортировать по второму столбцу, затем по третьему столбцу, а затем по первому столбцу, указав order = ['f1', 'f2', 'f0'].
Полагаю, это работает: a[a[:,1].argsort()]
Это указывает на второй столбец a
и соответственно сортирует на его основе.