Spec-Zone.ru › NumPy 1.20

numpy.lexsort

numpy.lexsort(keys, axis=-1)

Выполнить косвенную стабильную сортировку с использованием последовательности ключей.

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

Параметры
keys(k, N) array or tuple containing k (N,)-shaped sequences

Разные «столбцы» для сортировки. Последний столбец (или строка, если keys это двумерный массив) — это первичный ключ сортировки.

axisint, optional

Ось для косвенной сортировки. По умолчанию сортировка выполняется по последней оси.

Возвращает
indices(N,) ndarray of ints

Массив индексов, которые сортируют ключи вдоль указанной оси.

См. также

argsort

Косвенная сортировка.

ndarray.sort

Сортировка на месте.

sort

Возвращает отсортированную копию массива.

Примеры

Сортировка имён: сначала по фамилии, затем по имени.

>>> surnames =    ('Hertz',    'Galilei', 'Hertz')
>>> first_names = ('Heinrich', 'Galileo', 'Gustav')
>>> ind = np.lexsort((first_names, surnames))
>>> ind
array([1, 2, 0])
>>> [surnames[i] + ", " + first_names[i] for i in ind]
['Galilei, Galileo', 'Hertz, Gustav', 'Hertz, Heinrich']

Сортировка двух столбцов чисел:

>>> a = [1,5,1,4,3,4,4] # First column
>>> b = [9,4,0,4,0,2,1] # Second column
>>> ind = np.lexsort((b,a)) # Sort by a, then by b
>>> ind
array([2, 0, 4, 6, 5, 3, 1])
>>> [(a[i],b[i]) for i in ind]
[(1, 0), (1, 9), (3, 0), (4, 1), (4, 2), (4, 4), (5, 4)]

Обратите внимание, что сортировка выполняется сначала по элементам a. Вторичная сортировка выполняется по элементам b.

Обычная argsort дала бы:

>>> [(a[i],b[i]) for i in np.argsort(a)]
[(1, 9), (1, 0), (3, 0), (4, 4), (4, 2), (4, 1), (5, 4)]

Структурированные массивы сортируются лексикографически по argsort:

>>> x = np.array([(1,9), (5,4), (1,0), (4,4), (3,0), (4,2), (4,1)],
...              dtype=np.dtype([('x', int), ('y', int)]))
>>> np.argsort(x) # or np.argsort(x, order=('x', 'y'))
array([2, 0, 4, 6, 5, 3, 1])

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.lexsort.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API