РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
262 of 541 menu

Функция argpartition

Функция argpartition выполняет частичную сортировку массива и возвращает индексы элементов, которые заняли бы указанные позиции при полной сортировке. Это похоже на partition, но возвращаются не сами элементы, а их индексы. Первым параметром передаётся массив, вторым - позиция (или несколько позиций), которые нужно частично отсортировать. Третьим параметром можно указать ось, по которой выполняется сортировка.

Синтаксис

np.argpartition(arr, kth, axis=-1, kind='introselect', order=None)

Пример

Давайте выполним частичную сортировку одномерного массива и получим индексы элементов для третьей позиции:

import numpy as np arr = np.array([7, 2, 9, 1, 6, 3, 8, 5, 4]) res = np.argpartition(arr, 3) print(res)

Результат выполнения кода:

[3 1 5 8 6 4 2 7 0]

В результате индексы первых четырёх элементов (до позиции 3) соответствуют наименьшим значениям массива, но порядок внутри этих элементов не гарантируется.

Пример

Проверим, что элементы с индексами из первых четырёх позиций действительно являются наименьшими в массиве:

import numpy as np arr = np.array([7, 2, 9, 1, 6, 3, 8, 5, 4]) idx = np.argpartition(arr, 3) print(arr[idx[:4]])

Результат выполнения кода:

[1 2 3 4]

Как видите, это действительно четыре наименьших элемента массива.

Пример

Можно указать несколько позиций для частичной сортировки. Например, получим индексы для двух позиций одновременно:

import numpy as np arr = np.array([7, 2, 9, 1, 6, 3, 8, 5, 4]) res = np.argpartition(arr, [2, 5]) print(res)

Результат выполнения кода:

[3 1 5 8 6 4 2 7 0]

В этом случае элементы с индексами до позиции 2 будут наименьшими, а элементы с индексами до позиции 5 будут меньше всех остальных.

Пример

Давайте рассмотрим работу функции с двумерным массивом, указав ось для сортировки:

import numpy as np arr = np.array([[7, 2, 9], [1, 6, 3], [8, 5, 4]]) res = np.argpartition(arr, 1, axis=0) print(res)

Результат выполнения кода:

[[1 0 1] [0 2 2] [2 1 0]]

Здесь частичная сортировка выполняется по столбцам (ось 0). Каждый столбец сортируется независимо, и возвращаются индексы строк.

Пример

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

import numpy as np arr = np.array([[7, 2, 9], [1, 6, 3], [8, 5, 4]]) res = np.argpartition(arr, 0, axis=1) print(res)

Результат выполнения кода:

[[1 0 2] [0 2 1] [2 1 0]]

Каждая строка сортируется отдельно, и возвращаются индексы столбцов для наименьшего элемента в каждой строке.

Пример

Рассмотрим использование параметра order для сортировки структурированных массивов:

import numpy as np dtype = [('name', 'U10'), ('age', 'i4'), ('score', 'f4')] arr = np.array([('Alice', 25, 85.5), ('Bob', 30, 92.0), ('Charlie', 22, 78.3), ('David', 28, 88.7)], dtype=dtype) res = np.argpartition(arr, 1, order='score') print(res)

Результат выполнения кода:

[2 0 3 1]

Функция вернула индексы, где элемент с индексом 2 (Charlie) имеет наименьший score, а остальные индексы не гарантируют строгого порядка.

Пример

Применим функцию для поиска индексов наибольших элементов с использованием отрицательных значений:

import numpy as np arr = np.array([7, 2, 9, 1, 6, 3, 8, 5, 4]) res = np.argpartition(-arr, 2) print(res)

Результат выполнения кода:

[2 6 7 8 5 4 1 0 3]

Первые три индекса соответствуют элементам с наибольшими значениями (9, 8, 7), хотя порядок между ними не гарантируется.

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

  • функцию partition,
    которая возвращает частично отсортированные значения
  • функцию argsort,
    которая возвращает индексы для полной сортировки
  • функцию sort,
    которая выполняет полную сортировку массива
  • функцию searchsorted,
    которая находит позиции для вставки элементов в отсортированный массив
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить