argmax | NumPy
numpy.argmax(a, axis=None, out=None)
Функция argmax() возвращает индекс максимального значения вдоль указанной оси.
- Параметры:
- a — массив NumPy или подобный массиву объект.
- Исходный массив.
- axis — целое число (необязательный параметр).
- Определяет ось вдоль которой выполняется поиск элементов. Если равен None (по умолчанию), то поиск выполняется по сжатому до одной оси представлению исходного массива.
- Позволяет сразу напрямую поместить результат в указанный массив, при условии, что он имеет подходящую форму и тип данных.
- Возвращает:
- ndarray — массив NumPy
- массив индексов максимальных элементов в исходном массиве a с той же формой но удаленным размером по указанной в
axis
оси.
Смотрите так же:nanargmax
, argmin
, nanargmin
, unravel_index
, take_along_axis
Замечание
В случаях, когда максимальному значению соответствует несколько элементов, то возвращается индекс элемента с первым вхождением.
Данная функция обладает эквивалентным методом класса ndarray, т.е. np.argmax(a)
a.argmax()
:>>> a = np.random.randint(0, 20, 10) >>> a array([18, 4, 1, 19, 0, 14, 1, 17, 2, 6]) >>> >>> np.argmax(a) 3 >>> >>> a.argmax() 3
Примеры
По умолчанию axis = None
, что соответствует поиску максимальных значений в плоском представлении массива:
>>> import numpy as np >>> >>> a = np.random.randint(0, 20, size = (3, 5)) >>> a array([[14, 7, 14, 15, 16], [ 6, 11, 8, 12, 15], [16, 19, 2, 7, 17]]) >>> >>> >>> np.argmax(a) 11 >>> >>> a.flat[11] 19
В многомерных массивах поиск максимальных массивах может вестись вдоль указанных осей. Например, максимальные элементы в двумерных массивах могут быть могут быть найдены как по строкам, так и по столбцам. Вот индексы максимальных элементов в каждом столбце:
>>> np.argmax(a, axis = 0) array([2, 2, 0, 0, 2], dtype=int32)
Получить сами элементы по данным индексам можно с помощью функции np.take_along_axis()
:
>>> ind_col = np.argmax(a, axis = 0) >>> ind_col = np.expand_dims(ind_col, axis = 0) >>> ind_col array([[2, 2, 0, 0, 2]], dtype=int32) >>> >>> >>> np.take_along_axis(a, ind_col, axis = 0) array([[16, 19, 14, 15, 17]])
В том случае если мы ищем максимальный элемент на основе его индекса в плоском представлении массива, мы можем воспользоваться функцией np.unravel_index()
:
>>> ind = np.unravel_index(np.argmax(a), a.shape) >>> ind (2, 1) >>> >>> a[ind] 19
Однако, возвращаемые индексы, как правило, используются для поиска соответствующих элементов в других массивах:
>>> a array([[14, 7, 14, 15, 16], [ 6, 11, 8, 12, 15], [16, 19, 2, 7, 17]]) >>> >>> b = np. tile(np.arange(100, 103).reshape(3, 1), 5) >>> b array([[100, 100, 100, 100, 100], [101, 101, 101, 101, 101], [102, 102, 102, 102, 102]]) >>> >>> >>> np.take_along_axis(a, ind_col, axis = 0) array([[16, 19, 14, 15, 17]]) >>> >>> np.take_along_axis(b, ind_col, axis = 0) array([[102, 102, 100, 100, 102]]) >>> >>> >>> b[ind] 102
Получаем максимальный элемент списка Python [7 примеров]
В этой статье мы научимся находить максимальное значение в списке на Python. Для всестороннего понимания вопроса мы рассмотрим использование некоторых встроенных функций, простые подходы, а также небольшие реализации известных алгоритмов.
Сначала давайте вкратце рассмотрим, что такое список в Python и как найти в нем максимальное значение или просто наибольшее число.
Список в Python
В Python есть встроенный тип данных под названием список (list). По своей сути он сильно напоминает массив. Но в отличие от последнего данные внутри списка могут быть любого типа (необязательно одного): он может содержать целые числа, строки или значения с плавающей точкой, или даже другие списки.
Хранимые в списке данные определяются как разделенные запятыми значения, заключенные в квадратные скобки. Списки можно определять, используя любое имя переменной, а затем присваивая ей различные значения в квадратных скобках. Он является упорядоченным, изменяемым и допускает дублирование значений. Например:
КопироватьСкопированоUse a different Browser
list1 = ["Виктор", "Артем", "Роман"]list2 = [16, 78, 32, 67]list3 = ["яблоко", "манго", 16, "вишня", 3.4]
Далее мы рассмотрим возможные варианты кода на Python, реализующего поиск наибольшего элемента в списке, состоящем из сравниваемых элементов. В наших примерах будут использоваться следующие методы/функции:
- Встроенная функция
max()
- Метод грубой силы (перебора)
- Функция
reduce()
- Алгоритм Heap Queue (очередь с приоритетом)
- Функция
sort()
- Функция
sorted()
- Метод хвостовой рекурсии
№1 Нахождение максимального значения с помощью функции max()
Это самый простой и понятный подход к поиску наибольшего элемента. Функция Python max()
возвращает самый большой элемент итерабельного объекта. Ее также можно использовать для поиска максимального значения между двумя или более параметрами.
В приведенном ниже примере список передается функции max в качестве аргумента.
КопироватьСкопированоUse a different Browser
list1 = [3, 2, 8, 5, 10, 6]max_number = max(list1)print("Наибольшее число:", max_number)
Наибольшее число: 10
Если элементы списка являются строками, то сначала они упорядочиваются в алфавитном порядке, а затем возвращается наибольшая строка.
КопироватьСкопированоUse a different Browser
list1 = ["Виктор", "Артем", "Роман"]max_string = max(list1, key=len)print("Самая длинная строка:", max_string)
Самая длинная строка: Виктор
№2 Поиск максимального значения перебором
Это самая простая реализация, но она немного медленнее, чем функция max()
, поскольку мы используем этот алгоритм в цикле.
В примере выше для поиска максимального значения нами была определена функция large()
. Она принимает список в качестве единственного аргумента. Для сохранения найденного значения мы используем переменную max_
, которой изначально присваивается первый элемент списка. В цикле for каждый элемент сравнивается с этой переменной. Если он больше max_
, то мы сохраняем значение этого элемента в нашей переменной. После сравнения со всеми членами списка в max_
гарантировано находится наибольший элемент.
КопироватьСкопированоUse a different Browser
def large(arr): max_ = arr[0] for ele in arr: if ele > max_: max_ = ele return max_ list1 = [1,4,5,2,6]result = large(list1)print(result) # вернется 6
№3 Нахождение максимального значения с помощью функции reduce()
В функциональных языках reduce()
является важной и очень полезной функцией. В Python 3 функция reduce()
перенесена в отдельный модуль стандартной библиотеки под названием functools. Это решение было принято, чтобы поощрить разработчиков использовать циклы, так как они более читабельны. Рассмотрим приведенный ниже пример использования reduce()
двумя разными способами.
В этом варианте reduce()
принимает два параметра. Первый — ключевое слово max, которое означает поиск максимального числа, а второй аргумент — итерабельный объект.
КопироватьСкопированоUse a different Browser
from functools import reducelist1 = [-1, 3, 7, 99, 0]print(reduce(max, list1)) # вывод: 99
Другое решение показывает интересную конструкцию с использованием лямбда-функции. Функция reduce()
принимает в качестве аргумента лямбда-функцию, а та в свою очередь получает на вход условие и список для проверки максимального значения.
КопироватьСкопированоUse a different Browser
from functools import reducelist1 = [-1, 3, 7, 99, 0]print(reduce(lambda x, y: x if x > y else y, list1)) # -> 99
№4 Поиск максимального значения с помощью приоритетной очереди
Heapq — очень полезный модуль для реализации минимальной очереди. Если быть более точным, он предоставляет реализацию алгоритма очереди с приоритетом на основе кучи, известного как heapq. Важным свойством такой кучи является то, что ее наименьший элемент всегда будет корневым элементом. В приведенном примере мы используем функцию heapq.nlargest()
для нахождения максимального значения.
КопироватьСкопированоUse a different Browser
import heapqlist1 = [-1, 3, 7, 99, 0]print(heapq.nlargest(1, list1)) # -> [99]
Приведенный выше пример импортирует модуль heapq и принимает на вход список. Функция принимает n=1
в качестве первого аргумента, так как нам нужно найти одно максимальное значение, а вторым аргументом является наш список.
№5 Нахождение максимального значения с помощью функции sort()
Этот метод использует функцию sort()
для поиска наибольшего элемента. Он принимает на вход список значений, затем сортирует его в порядке возрастания и выводит последний элемент списка. Последним элементом в списке является list[-1]
.
КопироватьСкопированоUse a different Browser
list1 = [10, 20, 4, 45, 99]list1.sort()print("Наибольшее число:", list1[-1])
Наибольшее число: 99
№6 Нахождение максимального значения с помощью функции sorted()
Этот метод использует функцию sorted()
для поиска наибольшего элемента. В качестве входных данных он принимает список значений. Затем функция sorted()
сортирует список в порядке возрастания и выводит наибольшее число.
КопироватьСкопированоUse a different Browser
list1=[1,4,22,41,5,2]sorted_list = sorted(list1)result = sorted_list[-1]print(result) # -> 41
№7 Поиск максимального значения с помощью хвостовой рекурсии
Этот метод не очень удобен, и иногда программисты считают его бесполезным. Данное решение использует рекурсию, и поэтому его довольно сложно быстро понять. Кроме того, такая программа очень медленная и требует много памяти. Это происходит потому, что в отличие от чистых функциональных языков, Python не оптимизирован для хвостовой рекурсии, что приводит к созданию множества стековых фреймов: по одному для каждого вызова функции.
КопироватьСкопированоUse a different Browser
def find_max(arr, max_=None): if max_ is None: max_ = arr.pop() current = arr.pop() if current > max_: max_ = current if arr: return find_max(arr, max_) return max_list1=[1,2,3,4,2]result = find_max(list1)print(result) # -> 4
Заключение
В этой статье мы научились находить максимальное значение из заданного списка с помощью нескольких встроенных функций, таких как max()
, sort()
, reduce()
, sorted()
и других алгоритмов. Мы написали свои код, чтобы попробовать метод перебора, хвостовой рекурсии и алгоритма приоритетной очереди.
5 способов найти максимальный индекс списка в Python
Список — это структура данных в Python, которая используется для хранения элементов нескольких типов данных. Из-за этого он считается одной из самых универсальных структур данных. Мы можем хранить такие элементы, как строка, целое число, число с плавающей запятой, набор, список и т. д. внутри заданного списка. Список в питоне — изменяемый тип данных, а это значит, что даже после создания списка его элементы можно изменить. Список представляется путем хранения его элементов в квадратных скобках «[]». Мы можем получить доступ к элементам списка, используя индексирование. В этой статье мы рассмотрим, как в списке Python мы можем найти максимальный индекс.
Содержание
1. Нахождение максимального индекса с помощью цикла for
Нахождение максимального индекса с помощью цикла for — самый простой подход.
мой_список = [10,72,54,25,90,40] макс = мой_список[0] индекс = 0 для i в диапазоне (1, len (my_list)): если my_list[i] > макс.: макс = мой_список[i] индекс = я print (индекс f'Max равен: {index}')
Здесь мы взяли список с именем ‘my_list’, , который содержит список целых чисел. Сначала мы берем первый элемент списка как максимальный элемент и сохраняем элемент в «макс.». Затем мы берем переменную как «индекс» и сохраняем ее со значением 0.
После этого мы будем повторять цикл от индекса 1 до последнего элемента списка. Внутри цикла с помощью оператора if мы будем сравнивать и элемент, т. е. текущий элемент my_list с переменной max . Если значение текущего элемента окажется больше, чем значение
Вывод:
Максимальный индекс: 4
Описанный выше метод является наивным подходом. Это для понимания того, как будет найден максимальный элемент. Есть более компактные методы, и сейчас мы рассмотрим некоторые из них.
2. Использование встроенных методов – max() и index()
Мы можем использовать встроенные методы Python, чтобы найти максимальный индекс из списка Python.
Метод max() используется для нахождения максимального значения, когда задана последовательность элементов. Он возвращает этот максимальный элемент в качестве вывода функции. Он принимает последовательность в качестве аргумента функции.
Метод index() используется для поиска индекса данного элемента из списка Python. Он принимает элемент в качестве аргумента и возвращает индекс этого элемента. В случае нескольких вхождений он вернет наименьший индекс этого элемента.
Во-первых, мы будем использовать функцию max() , чтобы найти максимальный элемент из заданного списка
мой_список = [10,72,54,25,90,40] max_item = макс (мой_список) print (индекс f'Max: {my_list.index (max_item)}')
Результат:
Максимальный индекс: 4
Тенденции
Генерация симметричного ключа OpenSSL с использованием Python
3. Использование функции enumerate() для поиска максимального индекса списка Python в python используется для добавления счетчика к итерации. С помощью функции enumerate() мы можем найти индекс максимальных элементов из списка. Мы будем использовать понимание списка для хранения индекса. Понимание списков — это способ создания последовательностей из уже существующих последовательностей.
мой_список = [10,72,54,25,90,40] max_item = макс (мой_список) print([index for index, item in enumerate(my_list) if item == max_item])
Используя функцию max() , мы сохраним значение максимального элемента в ‘max_item’. Затем мы переберем my_list и проверим, для какого элемента списка значение равно max_item. Индекс для этого элемента должен быть напечатан как элемент списка.
Вывод:
[4]
4. Поиск максимального индекса для нескольких вхождений элементов
Если в списке есть несколько вхождений максимального элемента, то нам придется применить другую логику для того же самого. Мы будем использовать понимание списка для хранения нескольких индексов внутри списка.
мой_список = [10,72,90,90,54,25,90,40] max_item = макс (мой_список) index_list = [индекс для индекса в диапазоне (len(my_list)) if my_list[index] == max_item] печать (список_индексов)
Во-первых, используя max() мы найдем максимальный элемент из списка. Затем, используя понимание списка, мы будем перебирать список «my_list», , и всякий раз, когда значение элемента равно «max_item», , мы будем сохранять этот индекс в «my_list». Затем мы напечатаем ‘index_list’.
Вывод:
[2, 3, 6]
Популярно сейчас
Gingerit: исправление грамматических ошибок с помощью Python
5. Максимальный индекс из массива numpy
Чтобы найти максимальный индекс элемента, используя библиотеку numpy. Во-первых, мы импортируем библиотеку numpy. Затем, используя функцию array() , мы передадим список my_list в качестве аргумента внутри массива numpy. Это должно преобразовать данный список в массив numpy и сохранить его в ‘n’. Затем с помощью функции argmax() мы напечатаем индекс максимального элемента из массива numpy.
импортировать numpy как np мой_список = [10,72,54,25,90,40] n = np.массив (мой_список) print (индекс f'Max: {np.argmax (n)}')
Вывод:
Максимальный индекс: 4
Это завершает максимальный индекс списка Python. Если у вас есть какие-либо сомнения или какие-либо мысли, которыми можно поделиться, оставьте их в комментариях ниже.
До следующего раза, продолжайте учиться!
Сейчас в тренде
numpy.argmax — NumPy v1.23 Руководство
- numpy.argmax ( a , ось = нет , выход = нет , * , keepdims=<нет значения> )[источник]
Возвращает индексы максимальных значений по оси.
- Параметры
- a array_like
Входной массив.
- ось целое, необязательный
По умолчанию индекс находится в сглаженном массиве, в противном случае вдоль указанной оси.
- выходной массив , опционально
Если указано, результат будет вставлен в этот массив. Должно иметь соответствующую форму и тип.
- keepdims bool, опционально
Если установлено значение True, уменьшаемые оси остаются в результате как размеры с размером один. С этой опцией результат будет правильно транслироваться против массива.
Новое в версии 1.22.0.
- Возвращает
- index_array nмассив целых чисел
Массив индексов в массив. Он имеет ту же форму, что и a.shape . с удаленным размером по оси . Если для keepdims установлено значение True, тогда размер оси будет равен 1, а результирующий массив будет иметь тот же форма как a.форма .
См. также
-
ndarray.argmax
,argmin
-
amax
Максимальное значение по заданной оси.
-
unravel_index
Преобразование плоского индекса в индексный кортеж.
-
take_along_axis
Применить
np.expand_dims(index_array, axis)
из argmax к массиву, как будто вызвав max.
Примечания
В случае многократного появления максимальных значений индексы соответствующие первому вхождению.
Примеры
>>> a = np.arange(6).reshape(2,3) + 10 >>> а массив([[10, 11, 12], [13, 14, 15]]) >>> np.argmax(а) 5 >>> np.argmax (а, ось = 0) массив([1, 1, 1]) >>> np.argmax (а, ось = 1) массив ([2, 2])
Индексы максимальных элементов N-мерного массива:
>>> ind = np.unravel_index(np.argmax(a, axis=None), a.shape) >>> инд. (1, 2) >>> а[инд] 15
>>> b = np.arange(6) >>> б[1] = 5 >>> б массив ([0, 5, 2, 3, 4, 5]) >>> np.argmax(b) # Возвращается только первое вхождение. 1
>>> x = np.array([[4,2,3], [1,0,3]]) >>> index_array = np.argmax(x, ось=-1) >>> # То же, что и np.amax(x, axis=-1, keepdims=True) >>> np.take_along_axis(x, np.expand_dims(index_array, ось=-1), ось=-1) массив([[4], [3]]) >>> # То же, что и np.amax(x, axis=-1) >>> np.take_along_axis(x, np.expand_dims(index_array, ось=-1), ось=-1).