Multiply then sum elements of two matrices
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
What's the best way to 1) multiply all the elements between two similar sized matrices then 2) sum them into one single number/outcome?
1 commentaire
Réponse acceptée
Walter Roberson
le 28 Fév 2011
It is not clear from your question whether corresponding elements are to be multiplied or if you are wanting to do a matrix multiplication.
If corresponding elements are to be multiplied, then you could calculate the sum-of-products using
dot(A(:),B(:))
1 commentaire
Edoardo Bezzeccheri
le 25 Mai 2016
The mathematical name of the operation is called Frobenius Product, by the way.
Plus de réponses (3)
Bruno Luong
le 28 Fév 2011
I believe
sum(A(:).*B(:))
would be faster than dot(...) if that matter.
2 commentaires
Walter Roberson
le 28 Fév 2011
Heh. I just looked at the source for dot. It does sum(conj(a).*b) so yes, your suggestion should be slightly faster due to have a small bit less overhead.
James Tursa
le 28 Fév 2011
A bit of self-promotion:
mtimesx(A(:),'T',B(:),'speedomp')
You can find mtimesx here:
2 commentaires
Matt Fig
le 28 Fév 2011
Another (this should be faster than calling SUM):
reshape(A,1,[])*reshape(B,[],1)
9 commentaires
James Tursa
le 28 Fév 2011
e.g., 32-bit WinXP Intel Core 2 Duo:
>> A = rand(3000) + rand(3000)*1i;
>> B = rand(3000) + rand(3000)*1i;
>>
>> tic;dot(A(:),B(:));toc
Elapsed time is 0.158458 seconds.
>> tic;dot(A(:),B(:));toc
Elapsed time is 0.165634 seconds.
>>
>> tic;A(:)'*B(:);toc
Elapsed time is 0.101896 seconds.
>> tic;A(:)'*B(:);toc
Elapsed time is 0.101962 seconds.
>>
>> mtimesx('speedomp')
ans =
SPEEDOMP
>> tic;mtimesx(A(:),'C',B(:));toc
Elapsed time is 0.061016 seconds.
>> tic;mtimesx(A(:),'C',B(:));toc
Elapsed time is 0.061558 seconds.
The symmetric case difference is even more dramatic:
>> tic;dot(A(:),A(:));toc
Elapsed time is 0.146473 seconds.
>> tic;dot(A(:),A(:));toc
Elapsed time is 0.146098 seconds.
>>
>> tic;A(:)'*A(:);toc
Elapsed time is 0.084071 seconds.
>> tic;A(:)'*A(:);toc
Elapsed time is 0.082746 seconds.
>>
>> tic;mtimesx(A(:),'C',A(:));toc
Elapsed time is 0.032382 seconds.
>> tic;mtimesx(A(:),'C',A(:));toc
Elapsed time is 0.032521 seconds.
Voir également
Catégories
En savoir plus sur Operators and Elementary Operations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!