Spec-Zone.ru › NumPy 1.20

numpy.sort

numpy.sort(a, axis=-1, kind=None, order=None) [source]

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

Параметры
aarray_like

Массив, который нужно отсортировать.

axisint or None, optional

Ось, по которой нужно сортировать. Если None, массив сглаживается перед сортировкой. По умолчанию -1, что сортирует по последней оси.

kind{‘quicksort’, ‘mergesort’, ‘heapsort’, ‘stable’}, optional

Алгоритм сортировки. По умолчанию — ‘quicksort’. Обратите внимание, что как ‘stable’, так и ‘mergesort’ используют timsort или radix sort внутри и, как правило, фактическая реализация будет меняться в зависимости от типа данных. Опция ‘mergesort’ сохраняется для обратной совместимости.

Изменено в версии 1.15.0.: Была добавлена опция ‘stable’.

orderstr or list of str, optional

Если a является массивом с определенными полями, этот аргумент указывает, какие поля сравнивать первыми, вторыми и т. д. Одно поле может быть указано как строка, и не все поля нужно указывать, но неуказанные поля все равно будут использоваться в том порядке, в котором они появляются в dtype, для разделения совпадений.

Возвращает
sorted_arrayndarray

Массив того же типа и формы, что и a.

См. также

ndarray.sort

Метод для сортировки массива на месте.

argsort

Непрямая сортировка.

lexsort

Непрямая стабильная сортировка по нескольким ключам.

searchsorted

Поиск элементов в отсортированном массиве.

partition

Частичная сортировка.

Примечания

Различные алгоритмы сортировки характеризуются своей средней скоростью, худшим случаем, размером области работы и тем, являются ли они стабильными. Стабильная сортировка сохраняет элементы с одинаковым ключом в том же относительном порядке. Четыре алгоритма, реализованные в NumPy, имеют следующие свойства:

kind

скорость

худший случай

рабочая область

стабильно

‘quicksort’

1

O(n^2)

0

нет

‘heapsort’

3

O(n*log(n))

0

нет

‘mergesort’

2

O(n*log(n))

~n/2

да

‘timsort’

2

O(n*log(n))

~n/2

да

Примечание

Тип данных определяет, какой из ‘mergesort’ или ‘timsort’ фактически используется, даже если указан ‘mergesort’. Выбор пользователя на более мелком уровне в настоящее время недоступен.

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

Порядок сортировки комплексных чисел является лексикографическим. Если как вещественная, так и мнимая части не являются NaN, то порядок определяется вещественной частью, за исключением случаев, когда они равны, в этом случае порядок определяется мнимыми частями.

До numpy 1.4.0 сортировка вещественных и комплексных массивов, содержащих значения NaN, приводила к неопределенному поведению. В версиях numpy >= 1.4.0 значения NaN сортируются в конец. Расширенный порядок сортировки:

  • Вещественный: [R, nan]
  • Комплексный: [R + Rj, R + nanj, nan + Rj, nan + nanj]

где R — вещественное значение, не являющееся NaN. Комплексные значения с одинаковыми размещениями NaN сортируются в соответствии с частью, не являющейся NaN, если она существует. Значения, не являющиеся NaN, сортируются как и прежде.

Введено в версии 1.12.0.

quicksort был изменен на introsort. Когда сортировка не делает достаточно прогресса, она переключается на heapsort. Эта реализация делает quicksort O(n*log(n)) в худшем случае.

‘stable’ автоматически выбирает лучший стабильный алгоритм сортировки для сортируемого типа данных. Он, наряду с ‘mergesort’, в настоящее время сопоставляется с timsort или radix sort в зависимости от типа данных. Совместимость API в настоящее время ограничивает возможность выбора реализации, и она жёстко задана для разных типов данных.

Введено в версии 1.17.0.

Timsort добавлен для лучшей производительности на уже отсортированных или почти отсортированных данных. На случайных данных timsort почти идентичен mergesort. Он теперь используется для стабильной сортировки, в то время как quicksort по-прежнему является алгоритмом сортировки по умолчанию, если не выбран другой. Для подробностей о timsort см. CPython listsort.txt. ‘mergesort’ и ‘stable’ сопоставляются с radix sort для целочисленных типов данных. Radix sort — это сортировка O(n), а не O(n log n).

Изменено в версии 1.18.0.

NaT теперь сортируется в конец массивов для согласованности с NaN.

Примеры

>>> a = np.array([[1,4],[3,1]])
>>> np.sort(a)                # sort along the last axis
array([[1, 4],
       [1, 3]])
>>> np.sort(a, axis=None)     # sort the flattened array
array([1, 1, 3, 4])
>>> np.sort(a, axis=0)        # sort along the first axis
array([[1, 1],
       [3, 4]])

Используйте ключевое слово order для указания поля для использования при сортировке структурированного массива:

>>> dtype = [('name', 'S10'), ('height', float), ('age', int)]
>>> values = [('Arthur', 1.8, 41), ('Lancelot', 1.9, 38),
...           ('Galahad', 1.7, 38)]
>>> a = np.array(values, dtype=dtype)       # create a structured array
>>> np.sort(a, order='height')                        
array([('Galahad', 1.7, 38), ('Arthur', 1.8, 41),
       ('Lancelot', 1.8999999999999999, 38)],
      dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

Отсортировать по возрасту, затем по росту, если возраста равны:

>>> np.sort(a, order=['age', 'height'])               
array([('Galahad', 1.7, 38), ('Lancelot', 1.8999999999999999, 38),
       ('Arthur', 1.8, 41)],
      dtype=[('name', '|S10'), ('height', '<f8'), ('age', '<i4')])

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

Spec-Zone.ru

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