How to replace the diagonal elements of a matrix with 0 fro avoiding self loops?
181 views (last 30 days)
Show older comments
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 Comment
Ramtin Nazerian
on 21 Dec 2022
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 :).
Accepted Answer
More Answers (3)
Stephen23
on 19 Apr 2017
Edited: Stephen23
on 19 Apr 2017
Method one: indexing:
M(1:1+size(M,1):end) = 0
Method two: eye:
M.*~eye(size(M))
1 Comment
Stephen23
on 19 Apr 2017
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
on 19 Apr 2017
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 Comments
Zeina Abdullah
on 5 Jan 2022
@Stephen can you help me by try to answer the last question in my profile please
Christine Tobler
on 23 May 2017
Edited: Christine Tobler
on 23 May 2017
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');
0 Comments
See Also
Categories
Find more on Operating on Diagonal Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!