Чтобы использовать np.argsort для сортировки в порядке убывания в Python, сначала примените np.argsort к нашему массиву, а затем либо инвертируйте результат, используя срез массива([::-1]), либо инвертируйте массив перед сортировкой.
Для инвертирования отсортируйте массив с помощью np.argsort, а затем переверните полученные индексы.
Аргументная сортировка
Функция NumPy np.argsort в Python — это эффективный способ получить индексы массива, которые приводят к отсортированному порядку. Это особенно полезно в ситуациях, когда мы хотим отсортировать массив, но также необходимо отслеживать исходные положения элементов.
Синтаксис:
numpy.argsort(arr, axis=-1, kind=None, order=None)
Здесь:
arr | Массив необходимо отсортировать. |
axis | Ось, по которой производится сортировка. Если -1, массив Python выравнивается перед сортировкой. |
kind | Указывает алгоритм сортировки(«быстрая сортировка», «сортировка слиянием», «кучная сортировка», «стабильный»). |
order | Если arr — это массив структурированных типов данных в Python, этот аргумент указывает поле для сравнения. |
Возвращаемое значение:
Когда мы применяем np.argsort() в Python к массиву, он вычисляет индексы элементов массива в отсортированном порядке. Однако важно отметить, что это не меняет исходный массив.
Вместо этого он предоставляет способ доступа к элементам в том порядке, в котором можно отсортировать массив в Python.
По умолчанию функция np.argsort() в Python сортирует в порядке возрастания. Первый индекс в возвращаемом массиве относится к наименьшему элементу, второй индекс — ко второму наименьшему элементу и т. д.
Пример. Давайте рассмотрим пример, в котором у нас есть массив чисел, и мы хотим отсортировать его в порядке возрастания, используя np.argsort() в Python.
Эта функция не сортирует массив напрямую; вместо этого он возвращает индексы массива в том порядке, в котором они были бы, если бы массив был отсортирован.
import numpy as np arr = np.array([10, 5, 8, 1, 7]) sorted_indices = np.argsort(arr) print("Indices that would sort the array:", sorted_indices) sorted_arr = arr[sorted_indices] print("Sorted array:", sorted_arr)
Выход:
Indices that would sort the array: [3 1 4 2 0] Sorted array: [ 1 5 7 8 10]
После реализации кода в редакторе Pycharm снимок экрана указан ниже.
Как использовать
Хотя np.argsort в Python естественным образом сортирует в порядке возрастания, существует два способа использовать np.argsort в порядке убывания в Python:
- Инвертирование результата.
- Отрицание массива.
1. Путем инвертирования результата
После применения np.argsort инвертируйте порядок результата. Это можно сделать с помощью разрезания массива. Например:
import numpy as np arr = np.array([3, 1, 4, 1, 5, 9, 2]) ascending_order_indices = np.argsort(arr) descending_order_indices = ascending_order_indices[::-1] arr_descending_order = arr[descending_order_indices] print(arr_descending_order)
Вывод: Здесь [::-1] переворачивает массив в Python, превращая восходящий порядок в нисходящий.
[9 5 4 3 2 1 1]
Ниже приведен скриншот после реализации кода в редакторе Pycharm.
2. Путем отрицания массива
Другой подход — инвертировать значения массива, если массив состоит из числовых данных в Python. Таким образом, сначала сортируется наибольшее отрицательное значение (которое является наименьшим положительным значением). Таким образом, мы используем np.argsort в порядке убывания в Python. Например:
import numpy as np arr = np.array([3, 1, 4, 1, 5, 9, 2]) descending_order_indices = np.argsort(-arr) arr_descending_order = arr[descending_order_indices] print(arr_descending_order)
Вывод: отрицая arr, np.argsort в Python сортирует так, как если бы он был отсортирован в порядке убывания.
[9 5 4 3 2 1 1]
После выполнения кода в Pycharm результат можно увидеть на снимке экрана ниже.