# Modify off diagonal elements of Matrix without looping

38 views (last 30 days)
Chet Sharma on 17 Aug 2022
Commented: Chet Sharma on 17 Aug 2022
Hello
I have a MXM matrix. Is there a way to set off diagonal elements to a specified value (.e.g. I want all off-diagonal elements to be some constant "k'), without looping through the matrix? I know there is a function "diag"....was hoping to find something that does the opposite....not sucessful so far.
Thanks!
##### 0 CommentsShow -2 older commentsHide -2 older comments

Sign in to comment.

### Accepted Answer

James Tursa on 17 Aug 2022
You could use logical indexing to get at the off-diagonal elements. E.g.,
A(~eye(size(A))) = skalar;
##### 1 CommentShow -1 older commentsHide -1 older comments
Chet Sharma on 17 Aug 2022
Brilliant!! Thanks!

Sign in to comment.

### More Answers (1)

Bruno Luong on 17 Aug 2022
M = 4;
A = rand(M);
A(1:size(A,1)+1:end) = 10, % This is how you change the diagonal of A using linear indexing
A = 4×4
10.0000 0.8772 0.1202 0.5331 0.9790 10.0000 0.6722 0.3879 0.1196 0.8373 10.0000 0.2409 0.2357 0.9320 0.4094 10.0000
##### 3 CommentsShow 1 older commentHide 1 older comment
Bruno Luong on 17 Aug 2022
Chet Sharma on 17 Aug 2022
Found a way without the loop....but gosh it's not pretty:
My original matrix is 5x5.
So I create two idx matrices - upper and lower triangular. Then I replace the off-diagonal elements of the original A with the intended constant (skalar). If there's something better than this, I'll take it.....else this is it for now (found it on one of the QA's on the forum).
idx1 = tril(ones(5,5), -1);
idx2 = triu(ones(5,5), 1);
A(idx1==1) = skalar;
A(idx2== 1) = skalar;

Sign in to comment.

### Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

R2022a

### Community Treasure Hunt

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

Start Hunting!