numpy.argpartition#

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

Выполните косвенное разделение вдоль заданной оси, используя алгоритм, указанный kind ключевое слово. Оно возвращает массив индексов той же формы, что и a который индексирует данные вдоль заданной оси в разделённом порядке.

Параметры:
aarray_like

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

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

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

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

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

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

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

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

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

Возвращает:
index_arrayndarray, int

Массив индексов, которые разделяют a вдоль указанной оси. Если a является одномерным, a[index_array] дает разделенный a. В более общем случае, np.take_along_axis(a, index_array, axis=axis) всегда даёт разделённый a, независимо от размерности.

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

partition

Описывает используемые алгоритмы разбиения.

ndarray.partition

Разделение на месте.

argsort

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

take_along_axis

Apply index_array из argpartition в массив, как если бы вызывался partition.

Примечания

Возвращаемые индексы не гарантированно отсортированы по значениям. Кроме того, алгоритм выбора по умолчанию introselect нестабилен, и поэтому возвращаемые индексы не гарантированно являются первым/последним вхождением элемента.

argpartition работает для вещественных/комплексных входных данных со значениями nan, см. partition для заметок об улучшенном порядке сортировки и различных алгоритмах выбора.

Примеры

Одномерный массив:

>>> import numpy as np
>>> x = np.array([3, 4, 2, 1])
>>> x[np.argpartition(x, 3)]
array([2, 1, 3, 4]) # may vary
>>> x[np.argpartition(x, (1, 3))]
array([1, 2, 3, 4]) # may vary
>>> x = [3, 4, 2, 1]
>>> np.array(x)[np.argpartition(x, 3)]
array([2, 1, 3, 4]) # may vary

Многомерный массив:

>>> x = np.array([[3, 4, 2], [1, 3, 1]])
>>> index_array = np.argpartition(x, kth=1, axis=-1)
>>> # below is the same as np.partition(x, kth=1)
>>> np.take_along_axis(x, index_array, axis=-1)
array([[2, 3, 4],
       [1, 1, 3]])