How to add a diagonal to a matrix?

I have the following matrix M=[1 2 3; 4 5 6 ] and I would like to transform it to the follwowing matrix M=[0 1 2; 3 0 4; 5 6 0].
How to do it? It is how to add a zero diagonal to a predefined matrix?

Answers (1)

Matt J
Matt J on 4 Sep 2020
Edited: Matt J on 4 Sep 2020
One way,
[J,I]=ndgrid(1:size(M,1)+1);
idx=(I~=J);
M = accumarray([I(idx),J(idx)],reshape(M.',[],1))
M =
0 1 2
3 0 4
5 6 0

2 Comments

Thank you so much
You're quite welcome, but please Accept-click the answer if it resolves your question.

Sign in to comment.

Categories

Asked:

on 4 Sep 2020

Commented:

on 4 Sep 2020

Community Treasure Hunt

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

Start Hunting!