How do I access and modify only the non diagonal entries in a matrix?
92 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
srycandy
el 28 de Jul. de 2011
Comentada: Voss
el 18 de Jul. de 2024
hello.. i hv a question. what is the command to call the non diagonal entries of a matrix? tq very much...
0 comentarios
Respuesta aceptada
Rick Rosson
el 28 de Jul. de 2011
Please try the following:
M = 8;
N = 5;
X = randn(M,N);
idx = eye(M,N);
Y = (1-idx).*X;
Z = X(~idx);
HTH.
Best, Rick
Responding to your comment:
To multiply the non-diagonal elements by 2, please try:
A = [2 3 5;3 6 8;5 8 4];
idx = eye(size(A));
idx = idx + 2*(1-idx);
Y = idx.*A;
HTH.
Best, Rick
4 comentarios
Más respuestas (4)
Nathan Greco
el 28 de Jul. de 2011
If tmp is your matrix, try:
tmp-diag(diag(tmp)) %works only with square matrices
OR
triu(tmp,1)+tril(tmp,-1)
Both of these set the diagonal entries to zero, essentially ignoring them. If this isn't what you want, please clarify.
5 comentarios
dor eivensitz
el 2 de Nov. de 2017
i want to keep both diagonal in matrix size i don't know, defined by n, and all other elements to multiply by them self plus 1. tnx
1 comentario
James Tursa
el 2 de Nov. de 2017
Please open up a new question for this, and provide a short example in that new question.
James Tursa
el 2 de Nov. de 2017
Another way for a square matrix:
M = your matrix
x = ~logical(eye(size(M)));
M(x) = 2*M(x); % <-- or whatever function you want on the rhs using M(x)
0 comentarios
Niba Kainat
el 18 de Jul. de 2024
hi can someone tell me how to compute sum of no diagonal entries.
1 comentario
Voss
el 18 de Jul. de 2024
M = magic(4) % some square matrix
idx = ~eye(size(M)) % logical index indicating non-diagonal entries
result = sum(M(idx),'all') % sum the non-diagonal entries
Ver también
Categorías
Más información sobre Array Geometries and Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!