Арифметика из прошлых уроков давала новый массив той же длины. Часто нужен не массив, а одно число, которое описывает все данные: сколько всего, сколько в среднем, какой минимум и максимум. Такие операции называют агрегатами (aggregation) — они «сворачивают» массив в одно значение.
Сумма и среднее
У массива есть методы — действия, которые вызывают через точку и скобки: temps.sum() — сумма элементов,
temps.mean() — среднее арифметическое:
import numpy as np
temps = np.array([18.5, 21.0, 19.2, 25.4, 23.1, 17.8, 20.3])
print(temps.sum())
temps.mean()145.29999999999998
np.float64(20.757142857142856)
Значение выглядит как np.float64(20.757…). Это число NumPy — дробное число, которое хранится так же, как
элементы массива. С ним можно делать всё, что с обычным числом: складывать, сравнивать, округлять. Надпись
np.float64(…) — лишь способ показать тип; у целых так же — np.int64(…) (в браузере — np.int32(…),
почему — в уроке о типах данных). print выводит просто число:
avg = temps.mean()
print(avg)
print(round(avg, 1))20.757142857142856 20.8
Минимум и максимум — методы min и max:
print(temps.min(), temps.max())17.8 25.4
В steps — число шагов по дням недели. Сохраните в total_steps сумму за неделю, а в avg_steps — среднее
в день.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
steps = np.array([8200, 10450, 6100, 9800, 12300, 15400, 4300])
total_steps = ...
avg_steps = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
steps = np.array([8200, 10450, 6100, 9800, 12300, 15400, 4300])
total_steps = steps.sum()
avg_steps = steps.mean()Где максимум
max отвечает «какое значение самое большое», а argmax — «где оно стоит»: возвращает индекс
максимального элемента (arg — от argument, «аргумент, при котором достигается максимум»). Для минимума есть
argmin. Индекс удобно использовать, чтобы достать соответствующее значение из другого списка:
days = ["пн", "вт", "ср", "чт", "пт", "сб", "вс"]
i = temps.argmax()
print(i, days[i])
print(days[temps.argmin()])3 чт сб
В sales — выручка по дням, в списке days — названия дней в том же порядке. Сохраните в best_day название
дня с самой большой выручкой.
sales.argmax() даст индекс лучшего дня.days.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
sales = np.array([41200, 38900, 45100, 39800, 52300, 61700, 48800])
best_day = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
sales = np.array([41200, 38900, 45100, 39800, 52300, 61700, 48800])
best_day = days[sales.argmax()]Что напечатает print(np.array([3, 9, 4]).argmax())?
argmax возвращает не само максимальное значение (9), а его индекс. Девятка стоит на втором месте, а индексы считаются с нуля — поэтому 1.Метод или функция
Те же итоги есть в виде функций NumPy: np.sum(temps) — то же, что temps.sum(), np.mean(temps) — то же,
что temps.mean(). В чужом коде встречаются оба способа. Функции принимают и обычный список — NumPy сам
превратит его в массив:
print(np.sum(temps), np.mean(temps))
print(np.mean([2, 4, 9]))145.29999999999998 20.757142857142856 5.0
Посчитайте, насколько температура каждого дня из temps отличается от средней за неделю, и сохраните массив
отклонений в diff: теплее среднего — положительное число, холоднее — отрицательное.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
diff = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
diff = temps - temps.mean()Сохраните в spread размах температур за неделю — разницу между самым тёплым и самым холодным днём.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
spread = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
spread = temps.max() - temps.min()Итоги
sum,mean,min,maxсворачивают массив в одно число;argmaxиargmin— индекс максимума и минимума.- Результат — число NumPy:
np.float64(20.757…);printпоказывает просто число, для показа округляйтеround(x, 1). - Дробные числа хранятся приближённо — округляйте для показа встроенной
round. np.sum(a)иa.sum()— одно и то же; функции принимают и списки.