Broadcasting NumPy по строкам и столбцам: формы и пример

Broadcasting NumPy сопоставляет размеры массивов справа налево. Размеры совместимы, если равны или один из них равен 1; для операции по строкам часто нужна форма (n, 1).

Почему суммы строк нужно превратить в столбец

После a.sum(axis=1) у матрицы формы (n, m) получается вектор (n,). При делении он сопоставляется с последней осью матрицы, а не автоматически с её строками. Добавьте единичную ось через [:, None] или сохраните её через keepdims=True.

Для операции по столбцам вектор формы (m,) уже согласован с последней осью. Перед нормализацией проверьте знаменатель: корректная форма не защищает от деления на ноль. Ошибка operands could not be broadcast together требует сначала сопоставить формы.

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

import numpy as np
a = np.array([[2., 6.], [3., 9.], [5., 15.]])
sums = a.sum(axis=1, keepdims=True)
print(sums.shape)
print((a / sums).tolist())

Результат:

(3, 1)
[[0.25, 0.75], [0.25, 0.75], [0.25, 0.75]]

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

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

Broadcasting: нормализация строк и столбцов матрицы

Что уже дано

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

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

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

  1. Читает из stdin два целых числа R и C — число строк и столбцов матрицы.
  2. Читает следующие R строк; каждая содержит ровно C целых чисел через пробел. Создаёт двумерный массив M через np.array(..., dtype=float) формы (R, C).
  3. Нормализация по строкам. Вычисляет сумму каждой строки через np.sum(M, axis=1) — результат shape (R,). Делит M на эти суммы через broadcasting, добавив ось через [:, np.newaxis] или reshape(-1, 1), чтобы делитель стал формы (R, 1). Сохраняет результат в norm_rows — shape (R, C). Выводит shape norm_rows в одну строку.
  4. Нормализация по столбцам. Вычисляет максимум каждого столбца через np.max(M, axis=0) — результат shape (C,). Делит M на эти максимумы через broadcasting (форма (C,) совместима с (R, C) напрямую). Сохраняет результат в norm_cols — shape (R, C). Выводит shape norm_cols в одну строку.
  5. Выводит через пробел два значения: norm_rows[0, 0] и norm_cols[0, 0], округлённых до одного знака после запятой.

Ввод и вывод

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

Формат ввода

Первая строка: два целых числа R и C через пробел.

Следующие R строк: по C целых чисел через пробел.

Гарантируется: R >= 2, C >= 2, все элементы матрицы положительны.

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

Три строки:

  • shape norm_rows в виде кортежа Python, например (2, 4);
  • shape norm_cols в виде кортежа Python, например (2, 4);
  • два значения через пробел: norm_rows[0, 0] и norm_cols[0, 0], каждое с одним знаком после запятой.

Пример

Ввод
2 4
1 2 3 4
2 4 6 8
Вывод
(2, 4)
(2, 4)
0.1 0.5
РешениеPython

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

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

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