Matrix manipulation and using the sum command

2 visualizaciones (últimos 30 días)
Ataman Ugur
Ataman Ugur el 23 de En. de 2017
Editada: Walter Roberson el 30 de En. de 2017
Hey guys I'm trying to use the "sum" command to replace the central value in a 3x3 matrix by the 8 surrounding values, but I need to exclude the central value from the summation. A=[8 8 8;8 7 8;8 8 8], I need to replace the 7 with the sum of the surrounding 8's using the "sum" command. Can anyone show me how to exclude the 7 from the command A(2,2)=sum(A(1:3,1:3))?

Respuestas (2)

John Chilleri
John Chilleri el 23 de En. de 2017
Editada: John Chilleri el 29 de En. de 2017
Hello,
Would,
A(2,2) = 0;
A(2,2) = sum(A(:));
or
A(2,2) = sum(A(:)) - A(2,2);
suffice?
You could also generalize this to any matrix that has a center value (i.e. n x n where n is odd):
n = size(A,1);
A((n+1)/2,(n+1)/2) = sum(A(:)) - A((n+1)/2,(n+1)/2);
Hope this helps!
  2 comentarios
Jan
Jan el 29 de En. de 2017
Editada: Jan el 29 de En. de 2017
+1, Or sum(A(:)).
John Chilleri
John Chilleri el 29 de En. de 2017
Thanks for all the feedback on many of my posts! It's very helpful and much appreciated!
I decided to test if sum(A(:)) is faster than sum(sum(A))!
Other than being more elegant, it's also faster; performing 1,000,000 sum(A(:)) took about ~1.4 seconds versus ~2.2 seconds for sum(sum(A)). Will switch to A(:) from here on out!

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 30 de En. de 2017
Editada: Walter Roberson el 30 de En. de 2017
If you are doing this over an entire matrix, use
conv2(A, [1 1 1; 1 0 1; 1 1 1], 'same')
to do everything at once.

Categorías

Más información sobre Descriptive Statistics en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by