NumPy argmin(): Получение индекса минимального значения в массивах

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

Ищете способ найти индекс максимального значения в массиве NumPy? Для этого можно использовать функцию NumPy argmax()

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

  • Как использовать функцию np.argmin() для поиска индекса наименьшего значения в массиве NumPy

  • Как работать с одномерными и многомерными массивами для нахождения индекса минимального значения, в том числе при работе с разными осями

  • Как расширить функцию np.argmin() на DataFrames Pandas

Оглавление

Понимание функции NumPy argmin

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

# Понимание функции argmin в NumPy
import numpy as np

np.argmin(
   # Массив чисел для поиска минимального значения
   a,
   # Ось, по которой необходимо найти минимальное значение (по умолчанию - None)
   axis=None,
   # Локация для хранения результата (по умолчанию - None)
   out=None,
   # Флаг сохранения размерности в результате (по умолчанию - False)
   keepdims=<no value>
)

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

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

a=

Входной массив

N/A

array-like

axis=

По какой оси искать минимальное значение. Если None, массив выравнивается.

None

integer

out=

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

None

array

keepdims=

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

<no value>

boolean

Теперь, когда у вас есть твердое понимание дизайна функции NumPy argmin(), давайте начнем изучение ряда примеров.

Как использовать функцию NumPy argmin с одномерным массивом

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

# Использование функции argmin в NumPy с одномерным массивом чисел
import numpy as np

arr = np.array([10, 7, 4, 11, 12, 6]) # Одномерный массив чисел

print(np.argmin(arr)) # Поиск индекса минимального значения в массиве

# Возвращает:
# 2

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

  1. Мы импортируем numpy с псевдонимом np

  2. Мы создаем массив arr, который содержит шесть уникальных значений.

  3. Затем мы выводим результат передачи нашего массива в функцию

Функция возвращает 2. Это означает индекс минимального значения в массиве. Поскольку индексация массивов NumPy начинается с нуля, 2 соответствует третьему элементу в списке.

Мы можем затем получить доступ к соответствующему значению этого элемента индекса, индексируя массив, как показано ниже:

# Доступ к минимальному значению в NumPy-массиве при помощи argmin()
import numpy as np

arr = np.array([10, 7, 4, 11, 12, 6]) # Одномерный массив чисел

min_idx = np.argmin(arr) # Поиск индекса минимального значения в массиве
print(arr[min_idx]) # Вывод минимального значения по найденному индексу

# Возвращает:
# 4

В следующем разделе вы научитесь использовать функцию np.argmin() с двумерными массивами.

Как использовать функцию NumPy argmin с двумерными массивами

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

Давайте посмотрим, что произойдет, когда мы передадим двумерный массив в функцию np.argmin()

# Использование np.argmin() с многомерными массивами при использовании default-значений аргументов
import numpy as np

arr = np.array([
    [3, 7, 1, 2],
    [9, 3, 5, 1],
    [0, 1, 6, 4]
]) # Многомерный массив чисел

print(np.argmin(arr)) # Поиск индекса минимального значения в многомерном массиве (по умолчанию - по строкам)

# Возвращает:
# 8

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

По умолчанию функция np.argmin() будет использовать axis=None в качестве аргумента по умолчанию. Поскольку ось не указана, NumPy вернет индекс одномерной версии массива. Это означает, что, по умолчанию, NumPy преобразует массив в одномерный и найдет индекс минимального значения.

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

Нахождение индекса минимального значения по строкам с помощью NumPy argmin

Мы можем использовать параметр axis= функции np.argmin() для настройки как NumPy ищет минимальные значения. Используя axis=1, мы указываем NumPy искать минимальное значение в каждой «строке» массива. Давайте посмотрим, как это выглядит:

# Поиск индекса минимального значения строк-wise при помощи np.argmin()
import numpy as np

arr = np.array([
    [3, 7, 1, 2],
    [9, 3, 5, 1],
    [0, 1, 6, 4]
]) # Многомерный массив чисел

print(np.argmin(arr, axis=1)) # Поиск индекса минимального значения в каждой строке (axis = 1)

# Возвращает:
# [2 3 0]

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

Изображение ниже иллюстрирует, как выглядит этот процесс:

В следующем разделе вы узнаете, как функция argmin в NumPy может искать минимальные значения по столбцам.

Нахождение индекса минимального значения по столбцу с помощью NumPy argmin

Изменяя параметр axis= и установив его значение в 0, мы можем найти индексы минимальных значений, выполняя поиск по столбцам. Это позволяет нам находить минимальные значения вдоль оси с индексом 0. Давайте посмотрим, как это выглядит:

# Поиск индекса минимального значения столбц-wise при помощи np.argmin()
import numpy as np

arr = np.array([
    [3, 7, 1, 2],
    [9, 3, 5, 1],
    [0, 1, 6, 4]
]) # Многомерный массив чисел

print(np.argmin(arr, axis=0)) # Поиск индекса минимального значения в каждом столбце (axis = 0)

# Возвращает:
# [2 2 0 1]

Мы видим, что функция возвращает массив из четырех значений. Это соответствует количеству значений в каждом из внутренних массивов.

В следующем разделе вы узнаете, как использовать функцию argmin с Pandas.

Использование аргумента NumPy с Pandas

В этом разделе вы узнаете, как найти строку в DataFrame Pandas с минимальным значением в заданной колонке. Вы также узнаете, как вернуть значение заданной колонки, основываясь на поиске минимального значения в другой колонке.

Поскольку функция np.argmin() может принимать на вход массивоподобные значения, мы можем передать в неё числовые колонки из Pandas DataFrame Series. Давайте загрузим образцовый DataFrame и найдем индекс минимального значения:

# Использование np.argmin() с Pandas DataFrame
import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Name': ['Ник', 'Кейт', 'Эван', 'Кира'],
    'Score': [70, 85, 82, 67],
    'Location': ['Торонто', 'Нью-Йорк', 'Атланта', 'Сиэтл']}) # Датасет с данными о учащихся

print(np.argmin(df['Score'])) # Поиск индекса минимального значения в столбце со оценками

# Возвращает:
# 3

При передаче в функцию столбца Pandas в виде серии, функция возвращает индекс строки, соответствующей минимальному значению.

Мы можем получить доступ к информации строки, используя акцессор .iloc. Давайте посмотрим, как это выглядит:

# Доступ к строке со значением минимального значения в другом столбце
import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Name': ['Ник', 'Кейт', 'Эван', 'Кира'],
    'Score': [70, 85, 82, 67],
    'Location': ['Торонто', 'Нью-Йорк', 'Атланта', 'Сиэтл']}) # Датасет с данными о учащихся

min_idx = np.argmin(df['Score']) # Поиск индекса минимального значения в столбце со оценками
print(df.iloc[min_idx]) # Вывод строки со значением минимального значения

# Возвращает:
# Name           Кира
# Score            67
# Location    Сиэтл
# Name: 3, dtype: object

Наконец, мы также можем получить доступ к значению столбца, основываясь на нахождении минимального значения в другом столбце Pandas. Аналогично, это можно сделать с использованием акцессора .iloc, как показано ниже:

# Доступ к значению строки со значением минимального значения в другом столбце
import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Name': ['Ник', 'Кейт', 'Эван', 'Кира'],
    'Score': [70, 85, 82, 67],
    'Location': ['Торонто', 'Нью-Йорк', 'Атланта', 'Сиэтл']}) # Датасет с данными о учащихся

min_idx = np.argmin(df['Score']) # Поиск индекса минимального значения в столбце со оценками
print(df.iloc[min_idx, 0]) # Вывод имени студента со значением минимального значения

# Возвращает:
# Кира

В приведенном выше блоке кода мы используем акцессор .iloc для доступа к значению в 0-м столбце, чтобы получить имя пользователя, у которого был минимальный балл.

Часто задаваемые вопросы

Как NumPy argmin обрабатывает несколько минимальных значений?

При нахождении нескольких минимальных значений в массиве NumPy возвращается индекс только первого минимального значения.

Как NumPy argmin обрабатывает пропущенные значения?

По умолчанию NumPy обрабатывает пропущенные значения как минимальные. Для того, чтобы игнорировать пропущенные значения, можно использовать функцию np.nanargmin(), которая позволяет игнорировать пропущенные значения.

Заключение

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

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

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

Last updated