Spec-Zone.ru › NumPy 1.11

numpy.lexsort

numpy.lexsort(keys, axis=-1)

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

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

Параметры:

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

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

axis : int, необязательно

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

Возвращает:

indices : (N,) массив ndarray целых чисел

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

См. также

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
>>> print(ind)
[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])

© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.lexsort.html

Spec-Zone.ru

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