how can i negative all value in a matrix except diagonal?
8 ビュー (過去 30 日間)
古いコメントを表示
13.333 5 0 5 3.3333 0
5 27.333 4 10 3.3333 5
0 4 17.846 0 3.8462 10
5 10 0 17.5 2.5 0
3.3333 3.3333 3.8462 2.5 16.346 3.3333
0 5 10 0 3.3333 18.333
採用された回答
Stephen23
2022 年 1 月 11 日
編集済み: Stephen23
2022 年 4 月 11 日
M = [13.333,5,0,5,3.3333,0;5,27.333,4,10,3.3333,5;0,4,17.846,0,3.8462,10;5,10,0,17.5,2.5,0;3.3333,3.3333,3.8462,2.5,16.346,3.3333;0,5,10,0,3.3333,18.333]
Method one: subtraction (square only):
A = diag(diag(M)) - M.*~eye(size(M))
Method two: indexing (more robust, should work for any size):
B = -M;
B(eye(size(M))==1) = diag(M)
その他の回答 (1 件)
Jon
2022 年 1 月 11 日
Am = -(A - diag(diag(A))) + diag(diag(A))
2 件のコメント
Jon
2022 年 1 月 11 日
You could also do it in two lines using
Am = -A
Am(1:7:end) = A(1:7:end)
For both approaches, thanks to earlier posts from @John D'Errico https://www.mathworks.com/matlabcentral/answers/393125-how-to-replace-the-diagonal-entries-of-a-square-matrix-with-entries-from-a-vectore-of-equal-length
and
参考
カテゴリ
Help Center および File Exchange で Operating on Diagonal Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!