Effacer les filtres
Effacer les filtres

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

232 vues (au cours des 30 derniers jours)
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 commentaire
Ramtin Nazerian
Ramtin Nazerian le 21 Déc 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 :).

Connectez-vous pour commenter.

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 23 Mai 2017
out = M - diag(diag(M));
  2 commentaires
Michael Chan
Michael Chan le 28 Juil 2020
Not working if the diagonal is Inf or nan
tommsch
tommsch le 28 Juin 2024 à 8:33
Also not working, if the matrix is not square

Connectez-vous pour commenter.

Plus de réponses (3)

Stephen23
Stephen23 le 19 Avr 2017
Modifié(e) : Stephen23 le 19 Avr 2017
Method one: indexing:
M(1:1+size(M,1):end) = 0
Method two: eye:
M.*~eye(size(M))
  1 commentaire
Stephen23
Stephen23 le 19 Avr 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)

Connectez-vous pour commenter.


Roger Stafford
Roger Stafford le 19 Avr 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 commentaires
Stephen23
Stephen23 le 4 Jan 2022
@Hans Jakob Rivertz: not once you consider non-square matrices.
Zeina Abdullah
Zeina Abdullah le 5 Jan 2022
@Stephen can you help me by try to answer the last question in my profile please

Connectez-vous pour commenter.


Christine Tobler
Christine Tobler le 23 Mai 2017
Modifié(e) : Christine Tobler le 23 Mai 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');

Catégories

En savoir plus sur Operating on Diagonal Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by