Лучший способ сортировки массива numpy на основе одного столбца, а затем подсортировать на основе другого? - PullRequest
1 голос
/ 08 марта 2020

Привет. Я считаю, что эту проблему лучше всего продемонстрировать на примере.

У меня есть numpy массив

array =  
[[ 101  27]
 [6  355]
 [6400 85]
 [ 33 96]]

Я хочу отсортировать массив на основе значений во втором столбец (по возрастанию), чтобы получить

array =  
[[ 101  27]
[6400 85]
[ 33 96]
[6  355]]

Затем я хочу отсортировать по возрастанию первого столбца, но только для строк один и два. Затем повторите для рядов три и четыре.

Этот последний шаг может быть объяснен в псевдокоде:

if array[0][0] > array[1][0]:
    transpose array[0] and array[1]
if array[2][0] > array[3][0]:
    transpose array[2] and array[3]

Это дает:

array =  
[[ 101  27]
[6400 85]
[6  355]
[ 33 96]]

Я могу сделать это легко, но код не очень хороший, Я предполагаю, что есть элегантный / эффективный способ сделать это?

1 Ответ

1 голос
/ 08 марта 2020

Вы можете использовать встроенную функцию sorted в python, чтобы легко выполнить задачу sh,

Попробуйте:

array = sorted(array, key=lambda x: x[1])
array[:2] = sorted(array[:2], key=lambda x: x[0]) # sort first two rows by first col
array[2:] = sorted(array[2:], key=lambda x: x[0]) # sort next two rows by first col

print(array)

Вывод:

[[101, 27],
[6400, 85], 
[6, 355], 
[33, 96]]
...