Stuck with simple matrix calculation, can you help?

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

 Respuesta aceptada

Fangjun Jiang
Fangjun Jiang el 22 de Ag. de 2011
B=A.*V;
SumA=sum(sum(A));
if SumA~=0
C=sum(sum(B))/SumA;
end

9 comentarios

Aaron Burdick
Aaron Burdick el 22 de Ag. de 2011
Thanks so much! That worked!
Fangjun Jiang
Fangjun Jiang el 22 de Ag. de 2011
I am curious to know the status of your previous question regarding importfile(). Is that a auto-generated function?
James Tursa
James Tursa el 22 de Ag. de 2011
sum(A(:)) and sum(B(:)) are a bit cleaner than sum(sum(A)) and sum(sum(B))
Fangjun Jiang
Fangjun Jiang el 23 de Ag. de 2011
Good point! Will keep that in mind!
Sean de Wolski
Sean de Wolski el 23 de Ag. de 2011
@James, sadly not always (or even usually) faster.
Fangjun Jiang
Fangjun Jiang el 23 de Ag. de 2011
@Sean, How do we know which method is more efficient in general? I mean, it shouldn't require a test case every time. Is there any documentation guidance?
Fangjun Jiang
Fangjun Jiang el 23 de Ag. de 2011
@Sean, How do we know which method is more efficient in general? I mean, it shouldn't require a test case every time. Is there any documentation guidance?
Sean de Wolski
Sean de Wolski el 23 de Ag. de 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 el 23 de Ag. de 2011
Thanks Sean for the insight!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Introduction to Installation and Licensing en Centro de ayuda y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by