Matrix manipulation and using the sum command
17 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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))?
0 Commenti
Risposte (2)
John Chilleri
il 23 Gen 2017
Modificato: John Chilleri
il 29 Gen 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 Commenti
John Chilleri
il 29 Gen 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!
Walter Roberson
il 30 Gen 2017
Modificato: Walter Roberson
il 30 Gen 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.
0 Commenti
Vedere anche
Categorie
Scopri di più su Linear Algebra in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!