Matrix manipulation and using the sum command

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 日

1 投票

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 日

0 投票

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.

カテゴリ

ヘルプ センター および File ExchangeLinear Algebra についてさらに検索

質問済み:

2017 年 1 月 23 日

編集済み:

2017 年 1 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by