NumPy reshape и transpose: разница на примере и задача
reshape меняет форму массива, а транспонирование переставляет оси. Совпадение итогового shape не означает, что элементы стоят в одинаковом порядке.
Возьмём a = np.array([[1, 2, 3], [4, 5, 6]]). При a.T первая строка результата — [1, 4]. При обычном a.reshape(3, 2) первая строка — [1, 2]. В обоих случаях форма (3, 2), но содержимое различается.
В упражнении ниже сравните обе операции на массиве из условия. Проверьте расположение значений, а не только размеры; решение можно запустить без регистрации.
.T и reshape: одинаковая форма, разное расположение значений
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая на одном массиве показывает разницу между транспонированием и изменением формы:
- Читает два целых числа
rowsиcols. Гарантируется, что они различаются и оба не меньше 2. - Создаёт
flat = np.arange(rows * cols). - Создаёт
matформы(rows, cols)черезreshape. - Создаёт
via_t = mat.T. - Независимо создаёт
via_reshape = flat.reshape(cols, rows). - Печатает заголовок
T:, затем сам массивvia_t, заголовокreshape:, затем сам массивvia_reshape. - Последней строкой печатает
same_shape=True, если формы результатов совпадают.
Не переставляйте значения вручную. В этой задаче важно увидеть: .T и reshape(cols, rows) дают одинаковую форму, но располагают исходные значения по-разному.
Ввод и вывод
Программа читает данные из stdin и пишет результат в stdout.
Формат ввода
Одна строка: два различных целых числа rows cols, каждое не меньше 2.
Формат вывода
Сначала T: и напечатанный NumPy-массив via_t, затем reshape: и массив via_reshape, затем строка same_shape=True.
Пример
- Ввод
2 3
- Вывод
T: [[0 3] [1 4] [2 5]] reshape: [[0 1] [2 3] [4 5]] same_shape=True
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- NumPy newaxis и squeeze: вектор-строка и вектор-столбец
- dtype NumPy: целые и вещественные массивы, типы элементов
- NumPy shape, ndim, size и dtype: атрибуты массива и задача
- Срезы двумерного массива NumPy: строки, столбцы и шаг
- NumPy: целочисленная индексация, присваивание и маска
- NumPy zeros, ones и full: dtype — пример и задача
