How to eliminate for-loop?
Afficher commentaires plus anciens
Hi to everybody,
in the for-loop below, is a multiplication of a scalar with twice a matrix column. If two vectors in a for-loop are multiplied it should be possible to reformulate it into a matrix multiplication. How to do this? The task is to speed up the processing, especially if dimensions of matrix are becoming large.
A = [1 2; 3 4]
B = [5 6 7; 8 9 10; 11 12 13]
C = [1 0 0; 0 2 0; 0 0 0]
for indx = 1:size(A,2)
D(indx,:,:) = C(indx,indx) .* A(:,indx) * B(:,indx)';
end
Thanks Andy
Réponse acceptée
Plus de réponses (1)
This gives the correct output, unlike the accepted answer:
>> N = size(A,2);
>> Cd = diag(C);
>> G = bsxfun(@times,A.',permute(B(:,1:N),[2,3,1]));
>> G = bsxfun(@times,Cd(1:N),G);
>> isequal(D,G)
ans = 1
Catégories
En savoir plus sur MATLAB Coder dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!