Привет! NumPy предоставляет мощный набор статистических функций для работы с массивами. Они позволяют быстро вычислять основные характеристики данных: сумму, среднее, стандартное отклонение, минимум, максимум и накопленные суммы.
В этой статье мы разберём:
np.sum()— сумма элементовnp.mean()— среднее значениеnp.std()— стандартное отклонениеnp.min()/np.max()— минимум и максимумnp.cumsum()— накопленная сумма- Вычисления по осям (
axis) - Практические примеры
- Что нужно знать перед началом
- Основная часть
- np.sum() — сумма элементов
- np.mean() — среднее значение
- np.std() — стандартное отклонение
- np.min() и np.max() — минимум и максимум
- np.cumsum() — накопленная сумма
- Вычисления по осям (axis)
- Статистики для многомерных массивов
- Практические примеры
- Полный пример
- Задачи для закрепления
- Нюансы и подводные камни
- Понимание axis
- Стандартное отклонение
- NaN в данных
- Частые ошибки и как их избежать
- Ошибка 1: Неправильная размерность
- Ошибка 2: Путаница между population и sample std
- Ошибка 3: Игнорирование NaN
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный NumPy
- Базовое понимание массивов и форм
Совет: Статистические функции NumPy работают значительно быстрее, чем вычисления в Python-циклах.
Основная часть
np.sum() — сумма элементов
np.sum() вычисляет сумму всех элементов массива.
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr)) # 15
# Сумма по умолчанию — все элементы
print(arr.sum()) # 15Совет:
arr.sum()— метод массива,np.sum(arr)— функция. Оба работают одинаково.
np.mean() — среднее значение
np.mean() вычисляет среднее арифметическое.
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr)) # 3.0
arr2 = np.array([10, 20, 30])
print(np.mean(arr2)) # 20.0np.std() — стандартное отклонение
np.std() показывает разброс данных относительно среднего.
arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 1.4142135623730951
arr2 = np.array([1, 2, 100, 200])
print(np.std(arr2)) # 80.302...Совет: Чем больше стандартное отклонение, тем больше разброс данных.
np.min() и np.max() — минимум и максимум
arr = np.array([3, 1, 4, 1, 5, 9, 2])
print(np.min(arr)) # 1
print(np.max(arr)) # 9
# Индекс минимума/максимума
print(np.argmin(arr)) # 1
print(np.argmax(arr)) # 5Совет:
argmin()иargmax()возвращают индексы первого вхождения.
np.cumsum() — накопленная сумма
np.cumsum() возвращает массив с накопленными суммами.
arr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr)) # [ 1 3 6 10 15]
# Накопленная сумма с шагом
arr2 = np.array([5, -2, 3, 1])
print(np.cumsum(arr2)) # [5 3 6 7]Совет:
cumsum()часто используется для вычисления cumulative sums в анализе данных.
Вычисления по осям (axis)
Параметр axis позволяет вычислять статистику по строкам (axis=1) или столбцам (axis=0).
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Сумма всех элементов
print(np.sum(matrix)) # 45
# Сумма по столбцам (axis=0)
print(np.sum(matrix, axis=0)) # [12 15 18]
# Сумма по строкам (axis=1)
print(np.sum(matrix, axis=1)) # [ 6 15 24]
# Среднее по столбцам
print(np.mean(matrix, axis=0)) # [4. 5. 6.]
# Максимум по строкам
print(np.max(matrix, axis=1)) # [3 6 9]Совет:
axis=0— вдоль строк (сверху вниз),axis=1— вдоль столбцов (слева направо).
Статистики для многомерных массивов
arr_3d = np.array([
[[1, 2], [3, 4]],
[[5, 6], [7, 8]]
])
print("Сумма:", np.sum(arr_3d)) # 36
print("Сумма по axis=0:", np.sum(arr_3d, axis=0)) # [[6 8] [10 12]]
print("Сумма по axis=1:", np.sum(arr_3d, axis=1)) # [[4 6] [12 14]]
print("Сумма по axis=2:", np.sum(arr_3d, axis=2)) # [[3 7] [11 15]]Практические примеры
Пример 1. Анализ температур:
temperatures = np.array([18, 22, 25, 27, 30, 28, 24, 20, 19, 23])
print(f"Средняя температура: {np.mean(temperatures):.1f}°C")
print(f"Максимальная: {np.max(temperatures)}°C")
print(f"Минимальная: {np.min(temperatures)}°C")
print(f"Разброс: {np.std(temperatures):.1f}°C")
# Средняя температура: 23.6°C
# Максимальная: 30°C
# Минимальная: 18°C
# Разброс: 3.7°CПример 2. Накопленная сумма для продаж:
sales = np.array([120, 90, 150, 200, 170])
cumulative = np.cumsum(sales)
print("Продажи:", sales) # [120 90 150 200 170]
print("Накопленная сумма:", cumulative) # [120 210 360 560 730]Пример 3. Анализ студентов:
scores = np.array([
[85, 90, 78],
[92, 88, 84],
[70, 65, 72],
[95, 93, 90]
])
print("Средний балл по предметам:", np.mean(scores, axis=0))
# [85.5 84. 81. ]
print("Средний балл каждого студента:", np.mean(scores, axis=1))
# [84.33333333 88. 69. 92.66666667]
print("Лучший студент (макс сумма):", np.argmax(np.sum(scores, axis=1)))
# 3 (четвёртый студент)
print("Общий средний балл:", np.mean(scores))
# 82.75Полный пример
import numpy as np
# Создаём данные
data = np.random.randint(50, 100, size=(5, 4))
print("Исходные данные:\n", data)
print("\nОсновные статистики:")
print(f"Сумма всех элементов: {np.sum(data)}")
print(f"Среднее: {np.mean(data):.2f}")
print(f"Стандартное отклонение: {np.std(data):.2f}")
print(f"Минимум: {np.min(data)}")
print(f"Максимум: {np.max(data)}")
print("\nСтатистики по столбцам (axis=0):")
print(f"Сумма: {np.sum(data, axis=0)}")
print(f"Среднее: {np.mean(data, axis=0)}")
print(f"Максимум: {np.max(data, axis=0)}")
print("\nСтатистики по строкам (axis=1):")
print(f"Сумма: {np.sum(data, axis=1)}")
print(f"Среднее: {np.mean(data, axis=1)}")
print("\nНакопленная сумма по строкам:")
print(np.cumsum(data, axis=1))Задачи для закрепления
Задача 1. Найди сумму элементов массива [1, 2, 3, 4, 5].
Задача 2. Найди среднее значение массива [10, 20, 30, 40, 50].
Задача 3. Найди минимум и максимум массива [3, 1, 4, 1, 5, 9, 2].
Задача 4. Вычисли стандартное отклонение массива [1, 2, 3, 4, 5].
Задача 5. Вычисли накопленную сумму массива [1, 2, 3, 4, 5].
Ответы:
Задача 1.
arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr)) # 15Задача 2.
arr = np.array([10, 20, 30, 40, 50])
print(np.mean(arr)) # 30.0Задача 3.
arr = np.array([3, 1, 4, 1, 5, 9, 2])
print(np.min(arr)) # 1
print(np.max(arr)) # 9Задача 4.
arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 1.4142135623730951Задача 5.
arr = np.array([1, 2, 3, 4, 5])
print(np.cumsum(arr)) # [ 1 3 6 10 15]Нюансы и подводные камни
Понимание axis
axis=0— операция выполняется вдоль строк (сверху вниз)axis=1— операция выполняется вдоль столбцов (слева направо)
Стандартное отклонение
np.std() по умолчанию вычисляет population standard deviation (с делением на N). Для sample standard deviation используй ddof=1.
arr = np.array([1, 2, 3, 4, 5])
print(np.std(arr)) # 1.414...
print(np.std(arr, ddof=1)) # 1.581... (sample)NaN в данных
Если в массиве есть nan, большинство функций возвращают nan. Используй np.nansum(), np.nanmean(), np.nanstd() для игнорирования.
Частые ошибки и как их избежать
Ошибка 1: Неправильная размерность
Проверяй shape массива перед использованием axis.
Ошибка 2: Путаница между population и sample std
Используй ddof=1 для sample standard deviation.
Ошибка 3: Игнорирование NaN
Используй np.nan* функции для данных с пропусками.
Шпаргалка
| Функция | Описание |
|---|---|
np.sum(arr) | Сумма элементов |
np.mean(arr) | Среднее значение |
np.std(arr) | Стандартное отклонение |
np.min(arr) | Минимум |
np.max(arr) | Максимум |
np.argmin(arr) | Индекс минимума |
np.argmax(arr) | Индекс максимума |
np.cumsum(arr) | Накопленная сумма |
np.var(arr) | Дисперсия |
Заключение
Сегодня мы:
- Изучили основные статистические функции NumPy
- Разобрали sum, mean, std, min, max, cumsum
- Научились работать с параметром axis
- Практические примеры





