Задача курса

NumPy broadcasting: outer-таблица и центрирование строк

Курс «NumPy и pandas: практический тренажёр» · урок «Broadcasting: правила совместимости форм и исправление несовместимости»

Условие

Broadcasting: outer-таблица и центрирование матрицы по строкам

Что уже дано

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

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

Напишите программу, которая выполняет два broadcasting-вычисления над одними и теми же данными.

  1. Читает из stdin два целых числа R и C — число строк и столбцов.
  2. Читает следующие R строк; каждая содержит ровно C целых чисел через пробел. Создаёт двумерный массив M через np.array(..., dtype=float) формы (R, C).
  3. Outer-таблица разностей. Создаёт вектор row_means — среднее каждой строки через np.mean(M, axis=1), shape (R,). Создаёт вектор col_means — среднее каждого столбца через np.mean(M, axis=0), shape (C,). Вычисляет outer-таблицу diff = row_means[:, np.newaxis] - col_means через broadcasting — shape должен быть (R, C). Выводит shape diff в одну строку, затем значение элемента diff[0, 0] в следующую строку (целое число, если дробная часть нулевая, иначе float с одним знаком после запятой — используйте g-формат: f"{val:.1g}" не нужен, просто int(val) если val == int(val) иначе round(val, 1)).
  4. Центрирование строк. Вычитает из M среднее каждой строки через broadcasting: centered = M - row_means[:, np.newaxis] — shape (R, C). Выводит shape centered в одну строку, затем значение элемента centered[0, 0] в следующую строку (то же правило вывода числа).

Ввод и вывод

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

Формат ввода

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

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

Гарантируется: R >= 2, C >= 2.

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

Четыре строки:

  • shape diff в виде кортежа Python, например (3, 4);
  • значение diff[0, 0];
  • shape centered в виде кортежа Python, например (3, 4);
  • значение centered[0, 0].

Примеры

Пример 1

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

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

РешениеPython
Без регистрации · результат не сохраняется