Умножение матриц 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. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinтри целых числа в одной строке:M,K,N— гдеM— число объектов,K— число признаков,N— число выходов. - Читает следующие
Mстрок; каждая содержит ровноKвещественных чисел через пробел. Создаёт двумерный массивXчерезnp.array(..., dtype=float)формы(M, K)— матрица объектов (строка = один объект). - Читает следующие
Kстрок; каждая содержит ровноNвещественных чисел через пробел. Создаёт двумерный массивWчерезnp.array(..., dtype=float)формы(K, N)— матрица весов. - Вычисляет матрицу предсказаний
Y = X @ Wоператором@. ФормаYдолжна быть(M, N). - Выводит:
- первую строку: shape
X, shapeW, shapeYчерез пробел в виде(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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- NumPy A.T @ A: попарные скалярные произведения столбцов
- dtype NumPy: целые и вещественные массивы, типы элементов
- NumPy shape, ndim, size и dtype: атрибуты массива и задача
- Срезы двумерного массива NumPy: строки, столбцы и шаг
- NumPy reshape и transpose: разница на примере и задача
- NumPy newaxis и squeeze: вектор-строка и вектор-столбец
