Снова погода в Москве за 2025 год — теперь с масками. Новых понятий нет: сравнения, фильтры, &, |,
замена по условию, а ещё срезы и итоги из прошлых модулей.
import numpy as np
weather = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1)
tmin = weather[:, 1]
tmax = weather[:, 2]
precip = weather[:, 3]
print(weather.shape)(365, 4)
Шаг 1. Номера дней
Маска выбирает позиции в любом массиве той же длины. Если сделать массив номеров дней 1, 2, …, 365, маска
по температуре покажет, какие это дни.
Создайте массив days — номера дней от 1 до 365, — и сохраните в hot_days номера дней, когда максимальная
температура была выше 25 °C.
np.arange(1, 366) — конец не входит.days[tmax > 25].Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
days = ...
hot_days = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
days = np.arange(1, 366)
hot_days = days[tmax > 25]print(hot_days)
print(tmax[tmax > 25])[173 195 196 197 198 199 200 218 223] [26. 25.3 26.3 27.2 26.3 25.6 26. 26. 25.4]
Большинство жарких дней — одна волна жары в середине июля (дни 195–200).
Шаг 2. Июль
Июль — дни с индексами 181–211. Сохраните в july максимальные температуры июля, в july_avg — их среднее,
а в july_warm — сколько июльских дней было теплее 20 °C.
tmax[181:212] — конец не входит.july > 20.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
july = ...
july_avg = ...
july_warm = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
july = tmax[181:212]
july_avg = july.mean()
july_warm = (july > 20).sum()Шаг 3. Сильные осадки
Сохраните в rain_share долю дней с осадками (больше 0 мм), а в heavy_days — номера дней, когда выпало
больше 10 мм.
days по маске precip > 10.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
rain_share = ...
heavy_days = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
rain_share = (precip > 0).mean()
heavy_days = days[precip > 10]Шаг 4. Зима и лето
Зима — декабрь, январь и февраль: дни с 1-го по 59-й и с 335-го до конца года. Лето — с 152-го по 243-й день. Маски строятся по номерам дней.
Сохраните в winter маску зимних дней, в summer — летних, а в gap — на сколько градусов средний
максимум лета выше среднего максимума зимы.
(days <= 59) | (days >= 335) — «или», потому что это два куска года.(days >= 152) & (days <= 243) — «и».gap = tmax[summer].mean() - tmax[winter].mean().Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
winter = ...
summer = ...
gap = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
winter = (days <= 59) | (days >= 335)
summer = (days >= 152) & (days <= 243)
gap = tmax[summer].mean() - tmax[winter].mean()Шаг 5. Выбросы датчика
Датчик осадков иногда завышает показания: больше 20 мм за день на этой станции не бывает, такие значения считаем ошибкой и приравниваем к 20.
Сохраните в precip_fixed осадки, прижатые сверху к 20 мм (снизу — к 0), а в rain_total_fixed — сумму
осадков за год после поправки.
np.clip(precip, 0, 20).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
precip_fixed = ...
rain_total_fixed = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
precip_fixed = np.clip(precip, 0, 20)
rain_total_fixed = precip_fixed.sum()Выводы
print("жарких дней:", len(hot_days), "— больше всего подряд в июле:", hot_days[1:7])
print("доля дней с осадками:", round(rain_share, 2), "| ливней:", len(heavy_days))
print("лето теплее зимы на", round(gap, 1), "°C")
print("осадков за год после поправки:", round(rain_total_fixed, 1), "мм")жарких дней: 9 — больше всего подряд в июле: [195 196 197 198 199 200] доля дней с осадками: 0.46 | ливней: 11 лето теплее зимы на 24.8 °C осадков за год после поправки: 705.7 мм
Жарких дней за год — девять, и большинство из них — одна неделя в июле. Осадки шли почти в половину дней, но сильные — всего 11 раз. Лето в среднем теплее зимы почти на 25 градусов. Каждый ответ — одна строка с маской.