np.argmax(): Как использовать NumPy Argmax

В этом учебном пособии вы узнаете, как использовать функцию argmax() в NumPy для поиска индекса наибольшего значения в массиве. Функция np.argmax() может быть использована для нахождения максимального значения по массиву, а также по осям различных размерностей. Функция часто может вызывать замешательство, но это руководство должно развеять все ваши сомнения относительно того, как она работает.

К концу этого урока вы узнаете:

  • Как работает функция np.argmax()

  • Как использовать np.argmax() для поиска индекса максимального значения

  • Как использовать функцию argmax для фильтрации кадра данных Pandas

Оглавление

Что такое функция NumPy argmax?

Функция argmax() в NumPy используется для возвращения индекса максимального значения (или значений) массива по определенной оси. Прежде чем углубляться, давайте взглянем на то, как выглядит функция и какие параметры она имеет:

# Understanding the np.argmax() Function
np.argmax(
   a, 
   axis=None, 
   out=None, 
   keepdims=<no value>
)

В таблице ниже представлены различные параметры функции и их значения по умолчанию, а также краткое описание того, что они делают:

Параметр
Значение по умолчанию
Принятые значения
Описание

a=

None

array-like

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

axis=

None

integer

По умолчанию массив сглажен. Указывая ось, максимальные значения находятся вдоль указанных осей.

out=

None

array

Если указано, результаты будут вставлены в массив.

keepdims=

<no value>

boolean

Если задано значение True, уменьшенные оси остаются размерами одного размера.

В следующем разделе вы узнаете, как работает функция np.argmax() на практических примерах.

Как работает функция NumPy argmax()?

В этом разделе вы узнаете, как использовать функцию argmax() библиотеки NumPy для поиска индекса максимального значения (или значений) в массиве. Давайте начнем с одномерного массива, чтобы показать, как функция работает:

# A Simple Example Using np.argmax()
import numpy as np

arr = np.array([1,3,5,2,4])
max_idx = np.argmax(arr)

print(max_idx)

# Returns: 2

Давайте разберем то, что мы сделали выше:

  1. Мы импортировали NumPy, используя псевдоним np.

  2. Мы создали массив arr, содержащий пять значений.

  3. Мы создали переменную max_idx, которая стала результатом передачи массива в функцию np.argmax().

При выводе нашего результата на печать, мы увидели, что он возвращает 2. На данном этапе это должно быть довольно понятно: можно заметить, что самое большое значение - это 5 и оно находится на позиции индекса

Теперь давайте рассмотрим более сложный пример: мы передадим двумерный массив со значениями по умолчанию

# Passing a 2-Dimensional Array into np.argmax()
import numpy as np

arr = np.array([[1,3,5,2,4], [5,2,3,4,6]])
max_idx = np.argmax(arr)

print(max_idx)

# Returns: 9

Результат, возможно, удивит вас: мы передали двумерный массив, но было возвращено только одно значение. Точно так же ни один из массивов не имеет длины 9. Для многих пользователей функции скорее всего ожидалось, что будет возвращен массив из двух значений, каждое из которых предоставляет индекс максимального значения.

Однако, поскольку параметр axis установлен в значение None, NumPy преобразует массивы в одномерный массив и возвращает индекс максимального значения полученного массива. В следующем разделе вы узнаете, как изменить поведение функции np.argmax(), чтобы находить индексы максимальных значений по различным осям.

Как изменить ось функции NumPy argmax()

Функция np.argmax() принимает необязательный параметр axis=. По умолчанию он установлен в None, что означает, что передаваемый массив преобразуется в одномерный. Можно указать 0 для сортировки по столбцам или 1 для сортировки по строкам.

Давайте снова рассмотрим предыдущий пример и посмотрим, как будут выглядеть результаты при изменении параметра

# Using axis=0 to Modify the np.argmax() Function
import numpy as np

arr = np.array([[1,3,5,2,4], [5,2,3,4,6]])
max_idx = np.argmax(arr, axis=0)

print(max_idx)

# Returns: [1 0 0 1 1]

При передаче аргумента axis=0, функция возвращает индекс каждого максимального значения с точки зрения столбца. Из-за этого длина возвращаемого массива равна ширине передаваемого массива.

Если мы хотим вернуть максимальные значения по каждой строке, мы можем использовать параметр axis=1. Ниже показано, как это делается:

# Using axis=1 to Modify the np.argmax() Function
import numpy as np

arr = np.array([[1,3,5,2,4], [5,2,3,4,6]])
max_idx = np.argmax(arr, axis=1)

print(max_idx)

# Returns: [2 4]

В приведенном выше примере функция возвращает массив длиной 2, где каждое значение соответствует позиции индекса максимального значения в каждой "строке".

Как использовать argmax для фильтрации кадра данных Pandas

В этом разделе вы научитесь использовать функцию np.argmax() для фильтрации DataFrame в Pandas. Если мы хотим вернуть строку, содержащую максимальное значение в заданном столбце, мы можем использовать функцию np.argmax(), чтобы найти индекс этой строки. Давайте посмотрим, как это работает:

# Filtering a Pandas DataFrame with np.argmax()
import numpy as np
import pandas as pd

df = pd.DataFrame.from_dict({
    'Name': ['John', 'Jane', 'Mary', 'Bob'],
    'Age': [23, 14, 19, 25],
})

max_row = df.iloc[np.argmax(df['Age'])]

print(max_row)

# Returns:
# Name    Bob
# Age      25
# Name: 3, dtype: object

В приведенном выше коде мы использовали доступ через .loc для фильтрации нашего DataFrame на основе индексной позиции, возвращаемой функцией np.argmax()

Заключение

В этом учебном пособии вы научились использовать функцию np.argmax() для поиска позиции индекса максимального значения (или значений) в массиве NumPy. Сначала вы научились понимать параметры функции. Затем вы узнали, как использовать функцию на одномерном массиве, а также на многомерных массивах по разным осям. Наконец, вы научились использовать функцию для фильтрации DataFrame в Pandas для поиска индекса строки, содержащей максимальное значение.

Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с обучающими материалами ниже:

Last updated