Filter löschen
Filter löschen

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

232 Ansichten (letzte 30 Tage)
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 Kommentar
Ramtin Nazerian
Ramtin Nazerian am 21 Dez. 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 :).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 23 Mai 2017
out = M - diag(diag(M));

Weitere Antworten (3)

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

Melden Sie sich an, um zu kommentieren.


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

Melden Sie sich an, um zu kommentieren.


Christine Tobler
Christine Tobler am 23 Mai 2017
Bearbeitet: Christine Tobler am 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');

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by