Сортировка массивов в NumPy столбцом

Как я могу отсортировать массив в NumPy энным столбцом?

Например,

a = array([[9, 2, 3],
           [4, 5, 6],
           [7, 0, 5]])

Я хотел бы отсортировать строки по второму столбцу, такому, что я возвращаюсь:

array([[7, 0, 5],
       [9, 2, 3],
       [4, 5, 6]])
292
задан Paul Wintz 19 April 2018 в 21:05
поделиться

2 ответа

@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'].

124
ответ дан 23 November 2019 в 01:38
поделиться

Полагаю, это работает: a[a[:,1].argsort()]

Это указывает на второй столбец a и соответственно сортирует на его основе.

651
ответ дан 23 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: