Stuck with simple matrix calculation, can you help?

1 Ansicht (letzte 30 Tage)
Aaron Burdick
Aaron Burdick am 22 Aug. 2011
So I have two matrixes, both 44x72, let's call them A and V. What I need to do is multiply each value in row/column "ij" by the same value in the other matrix. Then I need to sum all these values up and divide by the sum of all the values in matrix A. Here's another way to think about what I need to do:
Answer = Sum(Aij x Vij) / Sum(Aij) over all i,j grid cells
Sounds easy to do but I can't figure it out. Thanks in advance for the help!
Aaron

Akzeptierte Antwort

Fangjun Jiang
Fangjun Jiang am 22 Aug. 2011
B=A.*V;
SumA=sum(sum(A));
if SumA~=0
C=sum(sum(B))/SumA;
end
  9 Kommentare
Sean de Wolski
Sean de Wolski am 23 Aug. 2011
No, it can't easily be documented because it's system and version dependent: yours will surely be different than mine. This happened with Matt Fig and me on a question a few months ago. I had a vectorized solution that used big matrices, he used a well designed for-loop. Mine was much faster on my system, his was faster on his.
As for the (:), here are three methods for doing the sum. On mine the sum(sum()) is the fastest followed by reshape (with the numel(), reshape is slowed to the speed of a drunk turtle with a []) and then colon comes in third. I think the newer versions have a faster colon (<humor!>).
A = magic(1000);
[t1 t2 t3] = deal(0);
for ii = 1:100
tic
B = sum(sum(A));
t1 = t1+toc;
tic
C = sum(A(:));
t2 = t2+toc;
tic
D = sum(reshape(A,numel(A),1));
t3 = t3+toc;
end
[t1 t2 t3]
When I make A have more dimensions, say 5, both reshape and colon are faster. But for 2d stuff, sum(sum is fair.
Fangjun Jiang
Fangjun Jiang am 23 Aug. 2011
Thanks Sean for the insight!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Data Type Identification finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by