Срезы двумерного массива 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. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinодну строку с четырьмя целыми числами:R,C,sr,sc— число строк, столбцов и шаги среза по строкам и столбцам. - Создаёт двумерный массив
arrчерезnp.arange(R * C).reshape(R, C). - Вычисляет и выводит в
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)
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- NumPy: прямоугольный срез вместо цепочечной индексации
- dtype NumPy: целые и вещественные массивы, типы элементов
- NumPy shape, ndim, size и dtype: атрибуты массива и задача
- NumPy reshape и transpose: разница на примере и задача
- NumPy newaxis и squeeze: вектор-строка и вектор-столбец
- NumPy: целочисленная индексация, присваивание и маска
