Matrix manipulation and using the sum command

2 ビュー (過去 30 日間)
Ataman Ugur
Ataman Ugur 2017 年 1 月 23 日
編集済み: Walter Roberson 2017 年 1 月 30 日
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))?

回答 (2 件)

John Chilleri
John Chilleri 2017 年 1 月 23 日
編集済み: John Chilleri 2017 年 1 月 29 日
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 件のコメント
Jan
Jan 2017 年 1 月 29 日
編集済み: Jan 2017 年 1 月 29 日
+1, Or sum(A(:)).
John Chilleri
John Chilleri 2017 年 1 月 29 日
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
Walter Roberson 2017 年 1 月 30 日
編集済み: Walter Roberson 2017 年 1 月 30 日
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.

カテゴリ

Help Center および File ExchangeDescriptive Statistics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by