Когда работаешь с данными, особенно с большими объемами, часто бывает нужно суммировать, усреднять или иным образом агрегировать данные. NumPy предоставляет множество удобных функций для этого.
Агрегирование — это процесс преобразования нескольких значений в одно значение. Например, вычисление среднего значения или суммы.
Используйте np.sum()
для вычисления суммы значений в массиве.
import numpy as np
data = np.array([1, 2, 3, 4, 5])
print(np.sum(data)) # 15
Для определения минимального и максимального значений используйте np.min()
и np.max()
соответственно.
data = np.array([1, 2, 3, 4, 5])
print(np.min(data)) # 1
print(np.max(data)) # 5
NumPy также предоставляет функции для вычисления среднего значения np.mean()
, медианы np.median()
и стандартного отклонения np.std()
.
data = np.array([1, 2, 3, 4, 5])
print(np.mean(data)) # 3.0
print(np.median(data)) # 3.0
print(np.std(data)) # 1.4142135623730951
Когда у вас есть многомерные массивы, вы можете агрегировать данные вдоль конкретной оси с использованием аргумента axis
.
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# Сумма всех значений
print(np.sum(matrix)) # 45
# Сумма значений по столбцам
print(np.sum(matrix, axis=0)) # [12, 15, 18]
# Сумма значений по строкам
print(np.sum(matrix, axis=1)) # [6, 15, 24]
NumPy предоставляет мощные инструменты для выполнения условных операций на массивах. Это позволяет агрегировать, модифицировать или выделять данные на основе заданных критериев. Давайте рассмотрим некоторые из них:
Базовые условные операции
Для простых условий вы можете использовать стандартные операторы сравнения.
arr = np.array([1, 2, 3, 4, 5])
print(arr > 3) # [False False False True True]
np.where()
Функция np.where()
— это векторизованный вариант тернарного оператора x if condition else y
. Она возвращает индексы элементов, удовлетворяющих условию.
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr > 3)
print(indices) # (array([3, 4], dtype=int64),)
# Используя np.where с 3 аргументами
result = np.where(arr > 3, 'больше 3', 'не больше 3')
print(result) # ['не больше 3' 'не больше 3' 'не больше 3' 'больше 3' 'больше 3']
Логические операции
Вы можете комбинировать условия с использованием логических операторов &
(и), |
(или), ^
(исключающее или) и ~
(не).
arr = np.array([1, 2, 3, 4, 5])
condition = (arr > 2) & (arr < 5)
print(condition) # [False False True True False]
Помните, что при использовании логических операторов с NumPy массивами вы должны использовать &
и |
вместо and
и or
и оборачивать каждое условие в круглые скобки.
np.count_nonzero()
Если вы хотите узнать, сколько элементов массива удовлетворяют определенному условию, вы можете использовать np.count_nonzero()
.
arr = np.array([1, 2, 3, 4, 5])
count = np.count_nonzero(arr > 3)
print(count) # 2
Также для этой цели можно использовать np.sum()
, так как True
рассматривается как 1, а False
как 0:
count = np.sum(arr > 3)
print(count) # 2
Маскирование
Маскирование — это процесс выбора подмножества данных на основе условия.
arr = np.array([1, 2, 3, 4, 5])
masked = arr[arr > 3]
print(masked) # [4 5]
np.prod()
: Вычисляет произведение элементов.arr = np.array([1, 2, 3, 4])
print(np.prod(arr)) # 24
np.var()
: Вычисляет дисперсию элементов.arr = np.array([1, 2, 3, 4])
print(np.var(arr)) # 1.25
np.any()
: Проверяет, есть ли хотя бы один элемент в массиве, который удовлетворяет условию (например, >0).arr = np.array([-1, 0, 5, 6])
print(np.any(arr > 0)) # True
np.all()
: Проверяет, все ли элементы в массиве удовлетворяют условию.arr = np.array([-1, 2, 3, 4])
print(np.all(arr > 0)) # False
np.argmax()
и np.argmin()
: Возвращают индексы максимального и минимального элементов, соответственно.arr = np.array([1, 2, 3, 4, 0])
print(np.argmax(arr)) # 3
print(np.argmin(arr)) # 4
np.unique()
: Возвращает уникальные элементы массива и их количество.arr = np.array([1, 1, 2, 2, 3, 3])
unique, counts = np.unique(arr, return_counts=True)
print(unique) # [1, 2, 3]
print(counts) # [2, 2, 2]
Агрегирование данных — это ключевой этап при анализе и обработке данных. Благодаря мощным и гибким инструментам NumPy вы можете легко и быстро проводить сложные агрегирующие операции, не погружаясь в детали реализации.
Содержание: