Учитывая любую n x n матрицу действительных коэффициентов A , мы можем определить билинейную форму b A : R n x R n → R по
b A ( x , y ) = x T Ay ,
и квадратичная форма q A : R n → R от
q A ( x ) = b A ( x , x ) = x T Ax .
(Для наиболее распространенных применений квадратичных форм q A матрица A является симметричной или даже симметричной положительно определенной, поэтому не стесняйтесь предполагать, что любой из этихэто тот случай, если это важно для вашего ответа.)
(Также, FWIW, b I и q I (где I - n x n единичная матрица), соответственно, стандартное внутреннее произведение, и квадрат L 2 -норма на R n, то есть x T y и x T x .)
Теперь предположим, что у меня есть две n x m матриц, X и Y и n x n матрица A .Я хотел бы оптимизировать вычисления как b A ( x , i , y, i ) и q A ( x , i )(где x , i и y , i обозначают i -й столбец X и Y , соответственно), и я предполагаю, что, по крайней мере, в некоторых средах, таких как numpy, R или Matlab, это потребует некоторой формы векторизации.
Единственное решениеЯ могу подумать, требует генерации диагональных блоков матриц [ X ], [ Y ] и [ A ], с размерами mn x м , мн х м и мн х мн соответственно и с (блочными) диагональными элементами x , i , y , i и A соответственно.Тогда желаемыми вычислениями будут умножения матриц [ X ] T [ A ] [ Y ] и [ X ] * * T тысячи двести двадцать девять [* * тысяча двести тридцать один А * +1232 *] [* * Х одна тысяча двести тридцать три ].Эта стратегия определенно не вдохновлена, но если есть способ сделать это, эффективный с точки зрения времени и пространства, я бы хотел увидеть это.(Само собой разумеется, что любая его реализация, которая не использует разреженность этих блочных матриц, будет обречена.)
Есть ли лучший подход?
Мои предпочтения системы для этогоявляется пустым, но ответы с точки зрения какой-либо другой системы, которая поддерживает эффективные вычисления матриц, такие как R или Matlab, тоже могут быть в порядке (при условии, что я могу выяснить, как перенести их в numpy).
Спасибо!
Конечно, вычисление продуктов X T AY и X T AX будет вычислять желаемое b A ( x , i , y , i ) и q A ( x , i ) (в качестве диагональных элементов результирующего м х м матрицы) вместе с O ( м 2 ) не имеет значения b A ( x , i , y , j ) и b A ( x , i , x , j ), (для i ≠ j ), так что это не стартер.