Asked by AnnaMaria Accardo
on 26 Feb 2015

Hi all, I'm trying to create a square matrix 9x9 where all the values are 9 and the diagonal is 0. Example:

0 9 9

9 0 9

9 9 0

I found a way to do it which is:

s(logical(eye(size(s)))) = 0

Is there an easy way to substitute a diagonal of a matrix (possibly without using [m n] = size(s) --> s[1:m]....) Thanks

Answer by sandhya
on 26 Feb 2015

Accepted Answer

The one line solution to your problem that strikes me (without using size function) is as under

9*(~eye(9,9))

Copy the above line of code and run in your command window. It gives the result you want.

Vote my answer if it was helpful....

AnnaMaria Accardo
on 26 Feb 2015

Ok amazing answer. You will be the accepted answer. But can you explain to me what '~' means? Thanks

sandhya
on 27 Feb 2015

Sign in to comment.

Answer by John D'Errico
on 26 Feb 2015

Edited by John D'Errico
on 26 Feb 2015

There are many ways of doing most anything in a tool like MATLAB.

To create the matrix you want to create, the very simplest one liner to do so is...

s = 9*~eye(3)

s =

0 9 9

9 0 9

9 9 0

Clearly this relies on the fact that your matrix was a very simple one, with constant off-diagonal elements, as well as constant (but different) diagonal elements. But the general idea is one that will work in other places too, so it is good to remember.

You did find a very reasonable way to zero out the diagonal of a matrix, or indeed to replace it too. I'll replace the diagonal of a 3x3 matrix of 9's with the numbers [1,2,3], just to show that you can use it for any general vector of elements.

s = 9*ones(3);

s(logical(eye(3))) = 1:3

s =

1 9 9

9 2 9

9 9 3

(Of course, vote for this answer if you found it useful.)

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 3 Comments

## Sean de Wolski (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/180493-substitue-a-diagonal-matrix#comment_268627

## John D'Errico (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/180493-substitue-a-diagonal-matrix#comment_268630

## AnnaMaria Accardo (view profile)

## Direct link to this comment

https://ch.mathworks.com/matlabcentral/answers/180493-substitue-a-diagonal-matrix#comment_268635

Sign in to comment.