Stuck with simple matrix calculation, can you help?
1 回表示 (過去 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
0 件のコメント
採用された回答
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
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 Center および File Exchange で Data Type Identification についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!