Вопрос проверяет понимание причин, по которым умножение матриц определено как скалярное произведение строк на столбцы, а не поэлементно, и как это связано с композицией линейных преобразований.
Умножение матриц не является произвольным правилом — оно напрямую вытекает из композиции линейных преобразований. Линейное преобразование можно представить как функцию, которая переводит вектор в другой вектор с помощью матрицы. Если у нас есть два преобразования: сначала применить B, затем A, то результирующее преобразование C = A * B должно действовать на вектор x как A(Bx).
Пусть B — матрица размером m×n, A — k×m. Тогда Bx даёт вектор размером m, а A(Bx) — размером k. Чтобы получить C размером k×n, элемент cij должен равняться скалярному произведению i-й строки A на j-й столбец B. Это единственный способ сохранить ассоциативность и линейность.
import numpy as np
# Линейное преобразование: поворот на 90 градусов
A = np.array([[0, -1], [1, 0]])
# Растяжение вдоль оси X
B = np.array([[2, 0], [0, 1]])
# Композиция: сначала растяжение, потом поворот
C = A @ B
print(C) # [[0, -1], [2, 0]]
# Проверка на векторе
v = np.array([1, 1])
print(A @ (B @ v)) # [-1, 2]
print(C @ v) # [-1, 2]Если бы умножение было поэлементным, результат не соответствовал бы последовательному применению преобразований.
Правило умножения матриц через скалярное произведение строк на столбцы — это не догма, а необходимость, продиктованная композицией линейных отображений. Оно широко применяется в компьютерной графике, машинном обучении и физике для компактной записи сложных преобразований.