Как отсортировать данный массив numpy по первому полю его строк? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть массив numpy, например:

data = np.array([
     (3, 730, 578, 696, 655),
     (1, 968, 728, 798, 809),
     (4, 882, 627, 962, 722),
     (9, 450, 462, 483, 487),
     (8, 435, 433, 449, 453),
     (7, 464, 434, 446, 436)], dtype=[('a', np.int), ('b', np.int), ('c', np.int), ('d', np.int), ('e', np.int)])

Форма (6,)

Я хотел бы отсортировать строки по этому первому полю, содержащему небольшой int , так что я получаю:

[(1, 730, 578, 696, 655)
 (3, 968, 728, 798, 809)
 (4, 882, 627, 962, 722)
 (7, 450, 462, 483, 487)
 (8, 435, 433, 449, 453)
 (9, 464, 434, 446, 436)]

Массив называется data. Я пробовал это, что видел в каком-то сообщении в блоге:

data[data[:].argsort()]

Но на самом деле он ничего не делает с этим массивом - остается отсортированным так же, как и при его создании.

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Чтобы отсортировать структурированный массив на месте по заданному столбцу, передайте имя столбца в параметре sort .

Итак, в вашем случае вы можете запустить:

data.sort(order='a')

При повторной печати данных вы получите:

array([(1, 968, 728, 798, 809), (3, 730, 578, 696, 655),
       (4, 882, 627, 962, 722), (7, 464, 434, 446, 436),
       (8, 435, 433, 449, 453), (9, 450, 462, 483, 487)],
      dtype=[('a', '<i4'), ('b', '<i4'), ('c', '<i4'), ('d', '<i4'), ('e', '<i4')])
0 голосов
/ 09 июля 2020

Ах ... глупая ошибка .. Я не назначал результат данным, как должен. Исправление:

data = data[data[:].argsort()]

решает проблему.

...