Срезы двумерного массива NumPy: строки, столбцы и шаг

Срез двумерного массива NumPy записывается как a[срез_строк, срез_столбцов]. В каждой оси можно независимо задать начало, исключённую правую границу и шаг.

Сначала строки, затем столбцы

В выражении a[::2, 1::2] выбираются строки с позициями 0, 2, 4 и столбцы с позициями 1, 3, 5. Значение -1 обозначает последнюю позицию; срез ::-1 разворачивает соответствующую ось.

Не путайте один элемент a[0, 0], строку a[0, :] и двумерный блок a[0:1, :]: у них разные формы. Размер результата зависит от количества выбранных позиций, а не от самого числа шага.

Пример на других данных

import numpy as np
a = np.arange(12).reshape(3, 4)
print(a[::2, 1::2].tolist())
print(a[::2, 1::2].shape)
print(a[-1, -1])

Результат:

[[1, 3], [9, 11]]
(2, 2)
11

Попробуйте сами

Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.

Значения через срезы с шагом и угловые элементы двумерного массива

Что уже дано

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

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

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

  1. Читает из stdin одну строку с четырьмя целыми числами: R, C, sr, sc — число строк, столбцов и шаги среза по строкам и столбцам.
  2. Создаёт двумерный массив arr через np.arange(R * C).reshape(R, C).
  3. Вычисляет и выводит в stdout пять строк в указанном порядке:
  • Строка 1: значение элемента arr[0, 0] (верхний левый угол).
  • Строка 2: значение элемента arr[-1, -1] (нижний правый угол) — через отрицательные индексы.
  • Строка 3: shape среза arr[::sr, ::sc] — каждая sr-я строка и каждый sc-й столбец.
  • Строка 4: shape среза arr[1::sr, 1::sc] — то же, но начиная с позиции 1 по каждой оси.
  • Строка 5: shape среза arr[0:R:sr, -1:-(C+1):-sc] — строки с шагом sr, столбцы в обратном порядке с шагом sc.

Shape выводите строго в формате Python: (r, c) для двумерных.

Ввод и вывод

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

Формат ввода

Одна строка: четыре целых числа R C sr sc, разделённые пробелами. Гарантируется: 2 <= R, C <= 20, 1 <= sr <= R, 1 <= sc <= C.

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

Пять строк: первые две — целые числа (значения элементов), последние три — shape в формате Python.

Пример

Ввод
4 6 2 3
Вывод
0
23
(2, 2)
(2, 2)
(2, 2)
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи