Задача курса

Булева маска NumPy для двумерного массива: отбор и замена

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

Закрепите поэлементные логические операции и присваивание по маске без ручного обхода матрицы.

Условие

Двумерный массив: маска через |, инверсия и присваивание строкой

Что уже дано

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

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

Напишите программу, которая:

  1. Читает из stdin два целых числа R и C — размер двумерного массива.
  2. Создаёт массив m через np.arange(R * C).reshape(R, C) с dtype=int.
  3. Строит маску mask_edge для элементов, которые меньше C (первая строка) или больше или равны R * C - C (последняя строка), используя оператор |. Выводит элементы m[mask_edge] через пробел, затем их shape.
  4. Строит инвертированную маску mask_inner = ~mask_edge для внутренних элементов. Выводит элементы m[mask_inner] через пробел, затем их shape.
  5. Выполняет m[mask_inner] = -1 — заменяет внутренние элементы на -1 на месте.
  6. Читает из stdin один целый индекс строки r_idx. Строит маску mask_row = m[r_idx] != -1 для элементов указанной строки, которые не равны -1. Выводит m[r_idx][mask_row] через пробел, затем m[r_idx][~mask_row] через пробел.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

Строка 1: два целых числа R C через пробел (R ≥ 3, C ≥ 2, R * C ≥ 6).
Строка 2: одно целое число r_idx — индекс строки (0 ≤ r_idx < R).

Формат вывода

Строка 1: элементы m[mask_edge] через пробел.
Строка 2: shape результата m[mask_edge] в виде (k,).
Строка 3: элементы m[mask_inner] через пробел.
Строка 4: shape результата m[mask_inner] в виде (k,).
Строка 5: элементы m[r_idx], которые не равны -1, через пробел (может быть пустой строкой, если таких нет).
Строка 6: элементы m[r_idx], которые равны -1, через пробел (может быть пустой строкой, если таких нет).

Примеры

Пример 1

Ввод
3 4
0
Ожидаемый результат
0 1 2 3 8 9 10 11
(8,)
4 5 6 7
(4,)
0 1 2 3

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется
Булева маска NumPy для двумерного массива: отбор и замена