Нашли ошибку?
базовыйNumPy 2.5.3

Базовые агрегации

Сумма, среднее, минимум, максимум и их индексы — сворачивают массив в одно число.

Нужно знать:Арифметика с массивами

Содержание статьи

Коротко

  • sum, mean, min, max, prod сворачивают весь массив в одно значение.
  • argmin / argmax — индекс минимума / максимума (первого, если их несколько).
  • Почти всё доступно и как метод (a.sum()), и как функция (np.sum(a)). Функция принимает и списки.
  • any() / all() — есть ли хоть один True / все ли True.
  • По строкам или столбцам — параметр axis, см. оси. Среднее с учётом NaN — nan-функции.

Синтаксис

a.sum(), a.mean(), a.min(), a.max(), a.prod()
a.argmin(), a.argmax()        # индексы
np.ptp(a)                     # размах max − min
a.any(), a.all()
np.sum(a, axis=None, dtype=None, keepdims=False)

Параметры

ПараметрЧто делаетПо умолчанию
axisось, по которой сворачивать; None — весь массивNone
dtypeтип накопления, например float для суммы маленьких целыхNone
keepdimsоставить свёрнутую ось длиной 1False
initialначальное значение: для max/min делает пустой массив допустимымобязательный

Примеры

Данные для примеровиспользуются во всех примерах ниже
steps = np.array([6200, 8400, 5100, 12000, 9800, 3000, 7500])   # шаги за неделю
Сумма, среднее, минимум, максимум
print(steps.sum(), steps.mean())
print(steps.min(), steps.max())
np.ptp(steps)                     # размах: max − min
Вывод
52000 7428.571428571428
3000 12000
np.int64(9000)
Где минимум и максимум
print(steps.argmin(), steps.argmax())   # индексы минимума и максимума
steps.argmax() + 1                      # номер дня с максимумом
Вывод
5 3
np.int64(4)
Есть ли хоть один / все ли
print((steps > 10000).any())
(steps > 1000).all()
Вывод
True
np.True_
Функция или метод
print(np.sum(steps) == steps.sum())
np.sum([1, 2, 3])                 # функция работает и со списком
Вывод
True
np.int64(6)

Подводные камни

Метод ptp удалён

Метод ptpошибка: AttributeError
steps.ptp()
Ошибка
AttributeError: 'numpy.ndarray' object has no attribute 'ptp'

Встроенные sum и max вместо методов NumPy

Встроенный sum перебирает массив по первой оси: для двумерного он складывает строки и возвращает массив, а не число. Кроме того, встроенные функции в десятки раз медленнее.

Встроенный sum для матрицы
table = np.array([[1, 2],
                  [3, 4]])
print(sum(table))                 # встроенный sum складывает строки
print(table.sum())                # сумма всех элементов
max(table[0])                     # для одномерного встроенный работает, но медленно
Вывод
[4 6]
10
np.int64(2)

Максимум пустого массива

Сумма пустого массива — 0, а у минимума и максимума значения нет. Если массив может оказаться пустым, передайте initial= или проверьте a.size.

max пустого массиваошибка: ValueError
empty = np.array([])
print(empty.sum())                # сумма пустого — 0
empty.max()                       # у максимума нет значения по умолчанию
Ошибка
0.0
ValueError: zero-size array to reduction operation maximum which has no identity