Умножение матриц NumPy: оператор @, размеры и пример

Для двумерных массивов NumPy оператор @ выполняет матричное умножение. Матрица формы (m, k) умножается на матрицу (k, n), результат имеет форму (m, n). Совпасть должны внутренние размеры.

Оператор * означает поэлементное умножение с правилами broadcasting и решает другую задачу.

Короткий пример

import numpy as np
x = np.array([[2, 1]])
w = np.array([[3], [4]])
y = x @ w
print(y.tolist())
print(y.shape)

Результат:

[[10]]
(1, 1)

Один выход здесь равен сумме произведений 2×3 + 1×4. Перед расчётом предсказаний выпишите shape объектов и весов. Транспонирование полезно только тогда, когда соответствует смыслу данных, а не просто убирает ошибку размеров.

Попробуйте самостоятельно

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

Документация.

Матрица весов и матрица объектов: предсказания через @

Что уже дано

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

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

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

  1. Читает из stdin три целых числа в одной строке: M, K, N — где M — число объектов, K — число признаков, N — число выходов.
  2. Читает следующие M строк; каждая содержит ровно K вещественных чисел через пробел. Создаёт двумерный массив X через np.array(..., dtype=float) формы (M, K) — матрица объектов (строка = один объект).
  3. Читает следующие K строк; каждая содержит ровно N вещественных чисел через пробел. Создаёт двумерный массив W через np.array(..., dtype=float) формы (K, N) — матрица весов.
  4. Вычисляет матрицу предсказаний Y = X @ W оператором @. Форма Y должна быть (M, N).
  5. Выводит:
  • первую строку: shape X, shape W, shape Y через пробел в виде (M, K) (K, N) (M, N);
  • затем M строк — строки матрицы Y, значения через пробел, округлённые до 2 знаков после запятой.

Ввод и вывод

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

Формат ввода

M K N
X[0][0] ... X[0][K-1]
...
X[M-1][0] ... X[M-1][K-1]
W[0][0] ... W[0][N-1]
...
W[K-1][0] ... W[K-1][N-1]

Гарантируется M >= 2, K >= 2, N >= 2.

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

(M, K) (K, N) (M, N)
Y[0][0] ... Y[0][N-1]
...
Y[M-1][0] ... Y[M-1][N-1]

Каждое значение Y выводится с ровно двумя знаками после запятой.

Пример

Ввод
2 3 2
1.0 0.0 2.0
0.0 1.0 3.0
1.0 0.0
0.0 1.0
1.0 1.0
Вывод
(2, 3) (3, 2) (2, 2)
3.00 2.00
3.00 4.00
РешениеPython

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

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

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