Stuck with simple matrix calculation, can you help?

2 次查看(过去 30 天)
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

采纳的回答

Fangjun Jiang
Fangjun Jiang 2011-8-22
B=A.*V;
SumA=sum(sum(A));
if SumA~=0
C=sum(sum(B))/SumA;
end
  9 个评论
Sean de Wolski
Sean de Wolski 2011-8-23
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Type Identification 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by