# matrix manupulation and reading diagonally

32 views (last 30 days)
NIKHIL on 8 Dec 2020
Commented: NIKHIL on 11 Dec 2020
Hello Team,
i have a matrix
Matrix_test = [13,10,5,2;7,14,11,6;3,8,15,12;1,4,9,16];
I want to read the matrix in the order mentioned in the matrix.
Starting from left bottom (1), then right top (2) and then again 2nd diagonal from left (3,4) and then 2nd right diagonal (5,6) and so on and so forth.
Edit : i there any way to create this kind of matrix for any n-by-n matrix automatically. i have created this Matrix_test manually but if i want 8x8 matrix in similar pattern . How to create it through generic code.

Stephan on 8 Dec 2020
This function may help:
M = [13,10,5,2;7,14,11,6;3,8,15,12;1,4,9,16]
R = cell(2,numel(diag(M)));
for k = 1:numel(diag(M))-1
R{1,k} = diag(M,-numel(diag(M))+k);
R{2,k} = diag(M,numel(diag(M))-k);
end
R = reshape(R,[],1);
R = [R; {diag(M)}];
R = cell2mat(R);
end
result is:
M =
13 10 5 2
7 14 11 6
3 8 15 12
1 4 9 16
MyResult =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##### 2 CommentsShowHide 1 older comment
NIKHIL on 11 Dec 2020
Hello Stephen, I have edited one additional question related to this query. How to create similar type of Matrix_test automatically with some code. can you please revert back to this query also ?

Bruno Luong on 8 Dec 2020
Edited: Bruno Luong on 8 Dec 2020
Matrix_test = [13,10,5,2;7,14,11,6;3,8,15,12;1,4,9,16]
[m,n]=size(Matrix_test);
[i,j]=ndgrid(1:m,1:n);
jmi = j(:)-i(:);
[~,is]=sortrows([-abs(jmi) jmi]);
Matrix_test(is)
NIKHIL on 11 Dec 2020
Thank you so much Bruno for quick response.
It is working really good