如果我有两个矩阵A
和B
,假设大小都m
n
,那么执行以下操作(在 Matlab 中)的最佳方法是什么:
C = zeros(m,m);
for t=1:n
C=C+A(:,t)*B(:,t)';
end
这只不过是
C = A*B';
其中A
和B
分别m
n
。我不确定你会得到比这更有效率,除非矩阵具有特殊属性。
使用 bsxfun
进行矩阵乘法可能会受益的一个地方是当维度足够大(可能是 100 x 100 或更大)并且一个矩阵是对角线时,例如:
A = rand(1e2);
B = diag(rand(1,1e2));
C = bsxfun(@times,A,diag(B).');
这发生在许多矩阵转换中 – 请参阅sqrtm
的代码,例如 ( edit sqrtm
)。