Azzera filtri
Azzera filtri

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

232 visualizzazioni (ultimi 30 giorni)
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 Commento
Ramtin Nazerian
Ramtin Nazerian il 21 Dic 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 :).

Accedi per commentare.

Risposta accettata

Andrei Bobrov
Andrei Bobrov il 23 Mag 2017
out = M - diag(diag(M));

Più risposte (3)

Stephen23
Stephen23 il 19 Apr 2017
Modificato: Stephen23 il 19 Apr 2017
Method one: indexing:
M(1:1+size(M,1):end) = 0
Method two: eye:
M.*~eye(size(M))
  1 Commento
Stephen23
Stephen23 il 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)

Accedi per commentare.


Roger Stafford
Roger Stafford il 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 Commenti

Accedi per commentare.


Christine Tobler
Christine Tobler il 23 Mag 2017
Modificato: Christine Tobler il 23 Mag 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');

Categorie

Scopri di più su Operating on Diagonal Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by