Borrar filtros
Borrar filtros

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

232 visualizaciones (últimos 30 días)
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 comentario
Ramtin Nazerian
Ramtin Nazerian el 21 de Dic. de 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 :).

Iniciar sesión para comentar.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 23 de Mayo de 2017
out = M - diag(diag(M));

Más respuestas (3)

Stephen23
Stephen23 el 19 de Abr. de 2017
Editada: Stephen23 el 19 de Abr. de 2017
Method one: indexing:
M(1:1+size(M,1):end) = 0
Method two: eye:
M.*~eye(size(M))
  1 comentario
Stephen23
Stephen23 el 19 de Abr. de 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)

Iniciar sesión para comentar.


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

Iniciar sesión para comentar.


Christine Tobler
Christine Tobler el 23 de Mayo de 2017
Editada: Christine Tobler el 23 de Mayo de 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');

Categorías

Más información sobre Operating on Diagonal Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by