Агрегации по массиву и по оси: sum, mean, min, max, argmin, argmax
Содержание курса
В прошлом уроке мы научились применять векторные операции к каждому элементу массива — складывать, сравнивать, обрезать значения через np.where и np.clip. Теперь задача другая: не преобразовать каждый элемент по отдельности, а получить из всего массива одно итоговое число — сумму, среднее, минимум или максимум.
Глобальная агрегация: sum, mean, min, max по всему массиву
Агрегация — это сворачивание нескольких значений в одно. Самый простой случай: передать массив целиком в np.sum, np.mean, np.min или np.max без каких-либо дополнительных параметров. NumPy обойдёт все элементы, независимо от формы массива, и вернёт один скаляр.
Посмотрим на конкретном примере:
import numpy as np
arr = np.array([[3, 1, 4],
[1, 5, 9],
[2, 6, 5]])
print(np.sum(arr)) # 36
print(np.mean(arr)) # 4.0
print(np.min(arr)) # 1
print(np.max(arr)) # 9
Массив имеет shape (3, 3) — девять элементов. Каждая из четырёх функций вернёт одно число: np.sum сложит все девять, np.mean поделит сумму на количество, np.min и np.max найдут крайние значения.
Важная деталь: результат — не Python-число, а NumPy-скаляр. Его shape — пустой кортеж (), что буквально означает «ноль измерений».
result = np.sum(arr)
print(type(result)) # <class 'numpy.int64'> или аналогичный
print(result.shape) # ()
Это работает для массивов любой формы: одномерных, двумерных, трёхмерных — не важно. Если axis не указан, NumPy считает, что нужно схлопнуть сразу все оси, и возвращает единственное число. Форма исходного массива влияет только на то, сколько элементов участвует в вычислении, но не на форму результата — она всегда ().
Это полезно, когда нужна одна общая характеристика: суммарная выручка по всей таблице продаж, средняя температура за весь период, глобальный минимум в матрице весов. Когда же нужен результат отдельно по строкам или столбцам — вступает в игру параметр axis, о котором пойдёт речь в следующем разделе.
