Задача курса

NumPy view и copy: меняется ли исходный массив?

Курс «NumPy и pandas: практический тренажёр» · урок «View и copy: предсказание влияния изменений среза на исходный массив»

Задача помогает отличать представление массива от независимой копии при работе со срезами.

Условие

View и copy на столбцовом срезе двумерного массива: изоляция мутации

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая демонстрирует разницу между view и copy на двумерном массиве:

  1. Читает из stdin два целых числа R и C — число строк и столбцов.
  2. Читает следующие R строк; каждая содержит ровно C целых чисел через пробел. Создаёт двумерный массив M через np.array(..., dtype=int) формы (R, C).
  3. Читает одну строку с двумя целыми числами r0 и r1 — границы среза строк.
  4. Читает одну строку с двумя целыми числами mrow и mcol — позиция для мутации внутри среза (индексы относительно среза).
  5. Читает одно целое число val — новое значение.
  6. Получает view vw = M[r0:r1, :] и копию cp = M[r0:r1, :].copy().
  7. Выводит строку shares_vw=<True|False> — результат np.shares_memory(M, vw).
  8. Выводит строку shares_cp=<True|False> — результат np.shares_memory(M, cp).
  9. Выполняет vw[mrow, mcol] = val. Выводит строку M_after_vw=<строки M через ; каждая строка — значения через пробел>.
  10. Выполняет 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
Без регистрации · результат не сохраняется