2017-02-06 2 views
0

У меня есть следующий массив:Сортировка NumPy массив с двумя столбцами

arr = array([[ 1., 3.], 
      [ 6., 6.], 
      [ 3., 0.], 
      [ 2., 5.], 
      [ 0., 3.], 
      [ 3., 3.], 
      [ 0., 6.]]) 

, содержащий X и Y координаты. Я хотел бы знать, как я могу отсортировать этот массив по первому сортировки X и после сортировки по Y. Я хотел бы что-то вроде этого:

new_ arr = array([[ 0., 3.], 
        [ 0., 6.], 
        [ 1., 3.], 
        [ 2., 5.], 
        [ 3., 0.], 
        [ 3., 3.], 
        [ 6., 6.]]) 
+1

есть 'numpy.lexsort' –

+0

@PaulPanzer спасибо! – dalmeida13

ответ

1

Вы можете использовать функцию нп lexort, вы можете прочитать больше в here

numpy.lexsort (keys, axis = -1) Выполнение косвенной сортировки с использованием последовательности ключей.

С учетом нескольких ключей сортировки, которые могут быть интерпретированы как столбцы в таблице , lexsort возвращает массив целых индексов, который описывает порядок сортировки по нескольким столбцам. Последний ключ в последовательности используется для первичного порядка сортировки, второго-последнего ключа для вторичного порядка сортировки и т. Д. Аргумент ключей должен быть последовательностью объектов, которые могут быть преобразованы в массивы той же формы. Если 2D массив предназначен для аргумента ключей, это строки интерпретируются как ключи сортировки и сортировка по последней строке , вторая последняя строка и т.д.

import numpy as np 
arr = np.array([[ 1., 3.], 
      [ 6., 6.], 
      [ 3., 0.], 
      [ 2., 5.], 
      [ 0., 3.], 
      [ 3., 3.], 
      [ 0., 6.]]) 
ind = np.lexsort(np.transpose(arr)[::-1]) 

print (arr[ind]) 

>>>[[ 0. 3.] 
[ 0. 6.] 
[ 1. 3.] 
[ 2. 5.] 
[ 3. 0.] 
[ 3. 3.] 
[ 6. 6.]] 
+0

благодарит за вашу помощь! – dalmeida13

Смежные вопросы