What's the best way to do the following (in Matlab) if I have two matrices A
and B
, let'say both of size m
-by-n
:
C = zeros(m,m);
for t=1:n
C=C+A(:,t)*B(:,t)';
end
What's the best way to do the following (in Matlab) if I have two matrices A
and B
, let'say both of size m
-by-n
:
C = zeros(m,m);
for t=1:n
C=C+A(:,t)*B(:,t)';
end
This is nothing more than
C = A*B';
where A
and B
are each m
-by-n
. I'm not sure that you're going to get more efficient than that unless the matrices have special properties.
One place where you might get a benefit from using bsxfun
for matrix multiplication is when the dimensions are sufficiently large (probably 100-by-100 or more) and one matrix is diagonal, e.g.:
A = rand(1e2);
B = diag(rand(1,1e2));
C = bsxfun(@times,A,diag(B).');
This occurs in many matrix transforms – see the code for sqrtm
for example (edit sqrtm
).