Форма массива — это только способ разложить числа по строкам и столбцам. Сами числа можно разложить
по-другому, не меняя их и не меняя порядка. Это делает метод reshape(строки, столбцы):
import numpy as np
nums = np.arange(12)
print(nums)
print(nums.reshape(3, 4))
print(nums.reshape(2, 6))[ 0 1 2 3 4 5 6 7 8 9 10 11] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11]]
Числа заполняют новую форму по строкам: сначала первая строка слева направо, потом вторая. Общее число элементов должно сохраниться: 12 = 3 × 4 = 2 × 6.
Создайте массив grid — числа от 1 до 20, разложенные в таблицу из 4 строк и 5 столбцов.
np.arange(1, 21), потом reshape(4, 5).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
grid = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
grid = np.arange(1, 21).reshape(4, 5)Год по неделям
В 2025 году 365 дней — это 52 полные недели и ещё один день. Возьмём первые 364 дня и разложим их по неделям: 52 строки по 7 дней. Тогда столбец таблицы — это один день недели за весь год:
tmax = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=2)
weeks = tmax[:364].reshape(52, 7)
print(weeks.shape)
print(weeks[0]) # первая неделя
print(weeks[:, 0].shape) # все среды(52, 7) [-3.2 -3.2 -3.7 -7.2 -7.2 -7.8 -8. ] (52,)
Строка weeks[0] — первая неделя года, столбец weeks[:, 0] — все среды (год начался в среду). То, что
раньше требовало среза с шагом, теперь — просто столбец.
Форма должна вмещать ровно столько элементов, сколько есть. 364 числа нельзя разложить в таблицу 5 × 7:
tmax[:364].reshape(5, 7)ValueError: cannot reshape array of size 364 into shape (5,7)
−1: посчитай сам
Один из размеров можно не считать, а написать -1: NumPy вычислит его из общего числа элементов.
reshape(-1, 7) — «сколько получится строк по 7»:
print(tmax[:364].reshape(-1, 7).shape)
print(np.arange(10).reshape(-1, 2))(52, 7) [[0 1] [2 3] [4 5] [6 7] [8 9]]
Загрузите минимальные температуры (столбец 1) в tmin. Возьмите первые 364 дня и разложите их по неделям
в tmin_weeks — по 7 дней в строке. Число недель не считайте — пусть посчитает NumPy.
[:364].reshape(-1, 7) — строки по 7, их число NumPy найдёт сам.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
tmin = ...
tmin_weeks = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
tmin = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=1)
tmin_weeks = tmin[:364].reshape(-1, 7)Какая форма у np.arange(24).reshape(-1, 6)?
-1 превратилось в 4.Обратно в ряд: ravel
ravel() вытягивает таблицу обратно в одномерный массив — строка за строкой:
table = np.arange(6).reshape(2, 3)
print(table)
print(table.ravel())[[0 1 2] [3 4 5]] [0 1 2 3 4 5]
Превратите таблицу tmin_weeks обратно в одномерный массив flat_tmin. Проверьте себя: напечатайте
flat_tmin[:7] и tmin[:7] — числа должны совпасть.
ravel() без аргументов.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
flat_tmin = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
flat_tmin = tmin_weeks.ravel()Повернуть таблицу: .T
Атрибут .T — транспонирование (transpose): строки становятся столбцами, столбцы — строками. У таблицы
52 × 7 после поворота форма 7 × 52: теперь строка — день недели:
print(weeks.T.shape)
print(weeks.T[0][:5]) # первые пять сред года(7, 52) [-3.2 -4.2 -2.4 -2.9 -4.1]
Не путайте .T с reshape на «перевёрнутую» форму. Форма у них получается одна, а таблицы — разные:
reshape перекладывает числа подряд, строка за строкой, а .T поворачивает таблицу — первая строка
становится первым столбцом:
small = np.arange(6).reshape(2, 3)
print(small)
print(small.T)
print(small.reshape(3, 2))[[0 1 2] [3 4 5]] [[0 3] [1 4] [2 5]] [[0 1] [2 3] [4 5]]
Сохраните в by_day таблицу tmin_weeks, повёрнутую так, чтобы каждая строка была одним днём недели
(форма 7 × 52). Затем сохраните в thursdays строку четвергов — это второй день в таблице, ведь год начался
в среду.
.T (это атрибут, без скобок).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
by_day = ...
thursdays = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
by_day = tmin_weeks.T
thursdays = by_day[1]Итоги
reshape(строки, столбцы)раскладывает те же числа по новой форме, построчно; число элементов не меняется.-1вместо одного размера — «посчитай сам».ravel()вытягивает таблицу в одномерный массив..Tменяет местами строки и столбцы.reshape,ravelи.Tпо возможности дают представление (окно на те же данные), а не копию.