NumPy axis=0, 1, 2: пример агрегации и задача

Параметр axis задаёт ось, по которой выполняется агрегация. Для массива формы (2, 3, 4) вызов sum(axis=0) без keepdims даёт форму (3, 4), sum(axis=1) — (2, 4), а sum(axis=2) — (2, 3).

Рабочая проверка перед вычислением: выпишите shape и уберите размер агрегируемой оси. Если используете keepdims=True, вместо удаления оси её размер станет равен единице.

В задаче ниже вычислите агрегаты конкретного 3D-массива и проверьте форму каждого результата. Условие и проверка доступны без регистрации.

Трёхмерный массив: агрегации по axis=0, axis=1, axis=2 и shape результата

Что уже дано

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

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

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

  1. Читает из stdin три целых числа D, R, C — количество «слоёв», строк и столбцов трёхмерного массива.
  2. Читает следующие D * R строк; каждая содержит C целых чисел через пробел. Из них создаёт трёхмерный массив cube через np.array(..., dtype=int).reshape(D, R, C) — shape (D, R, C).
  3. Вычисляет пять агрегаций и выводит результат каждой в два строки: первая — значения через пробел (или одно значение), вторая — shape кортежем Python:

Агрегация 1. np.sum(cube, axis=0) — сумма по «слоям» (ось 0 схлопывается). Shape результата (R, C).

Агрегация 2. np.mean(cube, axis=2) — среднее по столбцам (ось 2 схлопывается). Shape результата (D, R).

Агрегация 3. np.argmax(cube, axis=1) — номер строки с максимумом в каждом (слой, столбец). Shape результата (D, C).

Агрегация 4. np.min(cube, axis=0) — минимум по «слоям». Shape результата (R, C).

Агрегация 5. np.argmin(cube) без параметра axis — позиция минимума в развёрнутом массиве. Shape результата ().

Для многоэлементных результатов выводите значения через пробел в порядке обхода по умолчанию (flatten()). Для скаляра — одно число.

Ввод и вывод

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

Формат ввода

D R C
строка_0_слоя_0: c0 c1 ... c(C-1)
...
строка_(R-1)_слоя_0: c0 c1 ... c(C-1)
строка_0_слоя_1: c0 c1 ... c(C-1)
...
строка_(R-1)_слоя_(D-1): c0 c1 ... c(C-1)

Всего D * R строк с данными, каждая содержит C целых чисел.

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

Десять строк — по две на каждую из пяти агрегаций. Нечётная строка блока — значения через пробел или одно число. Чётная строка блока — shape в виде кортежа Python, например (3, 4) или ().

Пример

Ввод
2 3 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
16 17 18 19
20 21 22 23
Вывод
12 14 16 18 20 22 24 26 28 30 32 34
(3, 4)
1.5 5.5 9.5 13.5 17.5 21.5
(2, 3)
2 2 2 2 2 2 2 2
(2, 4)
0 1 2 3 4 5 6 7 8 9 10 11
(3, 4)
0
()
РешениеPython

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

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

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