Нашли ошибку?
Скачать чистый
урок 4 из 5≈ 15 минупражнения: 0 из 4

Итоги по массиву

Сумма, среднее, минимум и максимум одним вызовом — и где именно находится максимум. Почему в выводе np.float64(…).

Python запустится при первом выполнении

Арифметика из прошлых уроков давала новый массив той же длины. Часто нужен не массив, а одно число, которое описывает все данные: сколько всего, сколько в среднем, какой минимум и максимум. Такие операции называют агрегатами (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 выводит просто число:

[ ]print и round
avg = temps.mean()
print(avg)
print(round(avg, 1))
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
20.757142857142856
20.8

Минимум и максимум — методы min и max:

[ ]Самый холодный и самый тёплый день
print(temps.min(), temps.max())
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
17.8 25.4
[ ]Упражнение 1Шаги за неделю решено

В steps — число шагов по дням недели. Сохраните в total_steps сумму за неделю, а в avg_steps — среднее в день.

steps = np.array([8200, 10450, 6100, 9800, 12300, 15400, 4300])
total_steps = ...
avg_steps = ...

Где максимум

max отвечает «какое значение самое большое», а argmax — «где оно стоит»: возвращает индекс максимального элемента (arg — от argument, «аргумент, при котором достигается максимум»). Для минимума есть argmin. Индекс удобно использовать, чтобы достать соответствующее значение из другого списка:

[ ]В какой день было теплее всего
days = ["пн", "вт", "ср", "чт", "пт", "сб", "вс"]
i = temps.argmax()
print(i, days[i])
print(days[temps.argmin()])
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
3 чт
сб
[ ]Упражнение 2Лучший день продаж решено

В sales — выручка по дням, в списке days — названия дней в том же порядке. Сохраните в best_day название дня с самой большой выручкой.

sales = np.array([41200, 38900, 45100, 39800, 52300, 61700, 48800])
best_day = ...

Вопрос

Что напечатает print(np.array([3, 9, 4]).argmax())?

Метод или функция

Те же итоги есть в виде функций NumPy: np.sum(temps) — то же, что temps.sum(), np.mean(temps) — то же, что temps.mean(). В чужом коде встречаются оба способа. Функции принимают и обычный список — NumPy сам превратит его в массив:

[ ]np.sum и np.mean
print(np.sum(temps), np.mean(temps))
print(np.mean([2, 4, 9]))
Выводсохранённый · нажмите «Выполнить», чтобы получить свой
145.29999999999998 20.757142857142856
5.0
[ ]Упражнение 3Отклонение от среднего решено

Посчитайте, насколько температура каждого дня из temps отличается от средней за неделю, и сохраните массив отклонений в diff: теплее среднего — положительное число, холоднее — отрицательное.

diff = ...

[ ]Упражнение 4Размах температур решено

Сохраните в spread размах температур за неделю — разницу между самым тёплым и самым холодным днём.

spread = ...

Итоги

  • sum, mean, min, max сворачивают массив в одно число; argmax и argmin — индекс максимума и минимума.
  • Результат — число NumPy: np.float64(20.757…); print показывает просто число, для показа округляйте round(x, 1).
  • Дробные числа хранятся приближённо — округляйте для показа встроенной round.
  • np.sum(a) и a.sum() — одно и то же; функции принимают и списки.

Подробнее в справочнике

Нашли ошибку?