필터 지우기
필터 지우기

How to replace the diagonal elements of a matrix with 0 fro avoiding self loops?

조회 수: 232 (최근 30일)
I have a matrix
M= 1 0 0 0 1 0
0 1 0 1 0 0
0 0 1 0 1 1
1 0 0 1 0 0
1 1 1 0 0 0
0 0 0 1 0 1
I want to replace all the diagonal elements in this matrix to 0 if it is 1.
  댓글 수: 1
Ramtin Nazerian
Ramtin Nazerian 2022년 12월 21일
Out = M.*-(eye(height(M))-1);
This will make all the diagonal values of your matrix zero as long as the matrix is square. hope that helps :).

댓글을 달려면 로그인하십시오.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2017년 5월 23일
out = M - diag(diag(M));

추가 답변 (3개)

Stephen23
Stephen23 2017년 4월 19일
편집: Stephen23 2017년 4월 19일
Method one: indexing:
M(1:1+size(M,1):end) = 0
Method two: eye:
M.*~eye(size(M))
  댓글 수: 1
Stephen23
Stephen23 2017년 4월 19일
A strict interpretation of the question requires only diagonals equal to one get changed to zero: this is easy to implement with eye:
M.*~(eye(size(M)) & M==1)

댓글을 달려면 로그인하십시오.


Roger Stafford
Roger Stafford 2017년 4월 19일
If your matrix M is not square and if you only want those diagonal elements changed to zero “if it is 1”, then you can do the following. Other diagonal elements not equal to one will remain unchanged. (Your description was perhaps a little ambiguous on this latter point.)
[m,n] = size(M);
d = 1:m+1:min(m^2,m*(n-1)+m);
f = find(M(d))==1;
M(d(f)) = 0;
  댓글 수: 4
Stephen23
Stephen23 2022년 1월 4일
@Hans Jakob Rivertz: not once you consider non-square matrices.
Zeina Abdullah
Zeina Abdullah 2022년 1월 5일
@Stephen can you help me by try to answer the last question in my profile please

댓글을 달려면 로그인하십시오.


Christine Tobler
Christine Tobler 2017년 5월 23일
편집: Christine Tobler 2017년 5월 23일
If you are using the graph/digraph classes, you can also tell the constructor not to insert any self-loops for the diagonal elements:
g = graph(A, 'omitSelfLoops');

카테고리

Help CenterFile Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by