MATLAB Answers

How do I access and modify only the non diagonal entries in a matrix?

467 views (last 30 days)
srycandy on 28 Jul 2011
Answered: James Tursa on 2 Nov 2017
hello.. i hv a question. what is the command to call the non diagonal entries of a matrix? tq very much...

Accepted Answer

Rick Rosson
Rick Rosson on 28 Jul 2011
Please try the following:
M = 8;
N = 5;
X = randn(M,N);
idx = eye(M,N);
Y = (1-idx).*X;
Z = X(~idx);
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;
Best, Rick

Sign in to comment.

More Answers (3)

Nathan Greco
Nathan Greco on 28 Jul 2011
If tmp is your matrix, try:
tmp-diag(diag(tmp)) %works only with square matrices
Both of these set the diagonal entries to zero, essentially ignoring them. If this isn't what you want, please clarify.
srycandy on 28 Jul 2011
yup.. A.*2-diag(diag(A)) is the one i'm searching for.. i forgot to mentioned that i wanna keep the diagonal entries as well.. anyway, tq..

Sign in to comment.

dor eivensitz
dor eivensitz on 2 Nov 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 Comment
James Tursa
James Tursa on 2 Nov 2017
Please open up a new question for this, and provide a short example in that new question.

Sign in to comment.

James Tursa
James Tursa on 2 Nov 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)


Community Treasure Hunt

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

Start Hunting!