Задача курса
NumPy view и copy: меняется ли исходный массив?
Курс «NumPy и pandas: практический тренажёр» · урок «View и copy: предсказание влияния изменений среза на исходный массив»
Задача помогает отличать представление массива от независимой копии при работе со срезами.
Условие
View и copy на столбцовом срезе двумерного массива: изоляция мутации
Что уже дано
Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая демонстрирует разницу между view и copy на двумерном массиве:
- Читает из
stdinдва целых числаRиC— число строк и столбцов. - Читает следующие
Rстрок; каждая содержит ровноCцелых чисел через пробел. Создаёт двумерный массивMчерезnp.array(..., dtype=int)формы(R, C). - Читает одну строку с двумя целыми числами
r0иr1— границы среза строк. - Читает одну строку с двумя целыми числами
mrowиmcol— позиция для мутации внутри среза (индексы относительно среза). - Читает одно целое число
val— новое значение. - Получает view
vw = M[r0:r1, :]и копиюcp = M[r0:r1, :].copy(). - Выводит строку
shares_vw=<True|False>— результатnp.shares_memory(M, vw). - Выводит строку
shares_cp=<True|False>— результатnp.shares_memory(M, cp). - Выполняет
vw[mrow, mcol] = val. Выводит строкуM_after_vw=<строки M через ; каждая строка — значения через пробел>. - Выполняет
cp[mrow, mcol] = val. Выводит строкуM_after_cp=<строки M через ; каждая строка — значения через пробел>.
Строки матрицы в выводе разделяются символом ;, значения внутри строки — пробелом.
Ввод и вывод
Программа читает stdin и пишет в stdout.
Формат ввода
R C
<R строк по C целых чисел через пробел>
r0 r1
mrow mcol
val
Гарантируется: 0 <= r0 < r1 <= R, 0 <= mrow < r1 - r0, 0 <= mcol < C.
Формат вывода
shares_vw=<True|False>
shares_cp=<True|False>
M_after_vw=<строки через ;>
M_after_cp=<строки через ;>
Примеры
Пример 1
- Ввод
3 4 1 2 3 4 5 6 7 8 9 10 11 12 0 2 1 2 99
- Ожидаемый результат
shares_vw=True shares_cp=False M_after_vw=1 2 3 4; 5 6 99 8; 9 10 11 12 M_after_cp=1 2 3 4; 5 6 99 8; 9 10 11 12
Попробуйте решить
РешениеPython
Без регистрации · результат не сохраняется
