numpy.partition#

numpy.раздел(a, k-й, ось=-1, kind='introselect', порядок=None)[источник]#

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

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

Параметры:
aarray_like

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

k-йint или последовательность ints

Индекс элемента для разделения. k-е значение элемента будет в своей окончательной отсортированной позиции, и все меньшие элементы будут перемещены перед ним, а все равные или большие элементы — позади него. Порядок всех элементов в разделах не определен. Если предоставлена последовательность k-х индексов, она разделит все элементы, индексированные k-ми из них, в их отсортированные позиции одновременно.

осьint или None, опционально

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

kind{'introselect'}, опционально

Алгоритм выбора. По умолчанию 'introselect'.

порядокstr или список str, необязательно

Когда a является массивом с определенными полями, этот аргумент указывает, какие поля сравнивать первыми, вторыми и т.д. Одно поле может быть указано как строка. Не все поля должны быть указаны, но неуказанные поля все равно будут использоваться, в порядке их появления в dtype, для разрешения ничьих.

Возвращает:
partitioned_arrayndarray

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

Смотрите также

ndarray.partition

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

argpartition

Косвенное разделение.

sort

Полная сортировка

Примечания

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

kind

скорость

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

рабочее пространство

стабильный

‘introselect’

1

O(n)

0

нет

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

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

Порядок сортировки np.nan больше, чем np.inf.

Примеры

>>> import numpy as np
>>> a = np.array([7, 1, 7, 7, 1, 5, 7, 2, 3, 2, 6, 2, 3, 0])
>>> p = np.partition(a, 4)
>>> p
array([0, 1, 2, 1, 2, 5, 2, 3, 3, 6, 7, 7, 7, 7]) # may vary

p[4] равно 2; все элементы в p[:4] является значением по умолчанию для p[4]и все элементы в p[5:] больше или равны p[4]. Раздел:

[0, 1, 2, 1], [2], [5, 2, 3, 3, 6, 7, 7, 7, 7]

Следующий пример показывает использование нескольких значений, переданных в k-й.

>>> p2 = np.partition(a, (4, 8))
>>> p2
array([0, 1, 2, 1, 2, 3, 3, 2, 5, 6, 7, 7, 7, 7])

p2[4] равно 2 и p2[8] равно 5. Все элементы в p2[:4] меньше или равны p2[4], все элементы в p2[5:8] больше или равно p2[4] и меньше или равно p2[8]и все элементы в p2[9:] больше или равны p2[8]. Раздел:

[0, 1, 2, 1], [2], [3, 3, 2], [5], [6, 7, 7, 7, 7]