При сортировке 2D Numpy массива по нескольким столбцам сначала должны быть отсортированы наименее значимые столбцы. - PullRequest
0 голосов
/ 15 апреля 2020

ПРИМЕЧАНИЕ: это не вопрос даты и времени. Я использую Годы и Месяцы, чтобы продемонстрировать свое использование все большей и меньшей значимости.

Чтобы продемонстрировать, что я имею в виду под «наименее значимым», я буду использовать столбцы Годы и Месяцы, где месяц является наименее значимым.

a = np.array([(2003, 2),
              (2006, 2),
              (2003, 6),
              (2003, 4),
              (2005, 3)])

В терминологии базы данных, если я буду sh сортировать по году и месяцу, я просто использую «наиболее значимые столбцы первой логики c», что-то вроде «сортировки по году, месяцу», где год (col0) и месяц (col1) являются именами столбцов, и я получаю желаемый результат возрастания по годам, а затем по возрастанию месяцев в годах ....

2003, 2
2003, 4
2003, 6
2005, 3
2006, 2

Однако, если я использую тот же «самый значимый столбец, сначала logi c» из col0, col1

b = a[np.lexsort((a[:,0],a[:,1]))]

Я получаю

array([[2003,    2],
       [2006,    2],
       [2005,    3],
       [2003,    4],
       [2003,    6]])

Но если я использую 'наименее значимый столбец, сначала logi c'

b = a[np.lexsort((a[:,1],a[:,0]))]

, я получаю желаемый результат.

array([[2003,    2],
       [2003,    4],
       [2003,    6],
       [2005,    3],
       [2006,    2]])

Я не сталкивался с этим в своих поисках. Это правильно? В общем случае наименее значимые столбцы будут содержать порядок сортировки?

...