есть две матрицы 8 х 2048. (фактически каждая - это 2048 векторов) нужно получить вектор из 2048 компонент, в котором каждая компонента является результатом скалрярного произведения соответствующих векторов длины 8 из двух исходных матриц.


Код
A1.1 A1.2 A1.3 ... A1.2048
A2.1 A2.2 A1.3 ... A2.2048
..........................
A3.1 A3.2 A3.3 ... A3.2048


B1.1 B1.2 B1.3 ... B1.2048
B2.1 B2.2 B1.3 ... B2.2048
..........................
B3.1 B3.2 B3.3 ... B3.2048

==================

Ax.1*Bx.1,.... Ax.2048*Bx.2048

Такой результат можно получить, сделав diag(A' * B )

но обидно считать произведение таких больших матриц, когда в итоге от этого произведения возьмется только диагональ.

Есть у кого-нибудь идеи, как это можно сделать без циклов и избыточных вычислений ?

Догадался сам.

Делается это очень просто:

C = sum(A .* B);

по сравнению diag(A * B) экономия получилась у меня порядка 60 раз.