how can i negative all value in a matrix except diagonal?
조회 수: 5 (최근 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!