Spec-Zone.ru › NumPy 1.21

numpy.lexsort

numpy.lexsort(keys, axis=- 1)

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

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

Параметры
keys(k, N) массив или кортеж, содержащий k (N,)-образных последовательностей

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

axisint, необязательно

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

Возвращает
indices(N,) одномерный массив целых чисел

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

См. также

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–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.lexsort.html

Spec-Zone.ru

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