creating a data array from a matrix

54 views (last 30 days)
Damith on 30 May 2014
Commented: Damith on 31 May 2014
Hi,
I have matrix1 of 39 x 39. I need to create X and Y arrays by reading elements from rows and columns of matrix1 in a certain way.
X Y
(2,1) (1,2)
(3,1) (1,3)
(4,1) (1,4)
..
(39,1) (1,39)
(3,2) (2,3)
(4,2) (2,4)
..
(39,2) (2,39)
(4,3) (3,4)
..
(39,3) (3,39)
..
(39,38) (38,39)
How can I implement in MATLAB? Can somebody help me.

Geoff Hayes on 30 May 2014
Edited: Geoff Hayes on 30 May 2014
Hi Damith - I'd go with a double for loop, pre-allocating memory for the X and Y vectors:
[m,n] = size(matrix1); % where matrix1 is the 39x39 matrix
numElems = (m-1)*m/2; % since ignoring elements on matrix diagonal
X = zeros(numElems,1);
Y = X;
at = 1;
for i=1:m
for j=i+1:m % since not interested in i==j
X(at) = matrix1(j,i);
Y(at) = matrix1(i,j);
at = at + 1;
end
end

1 Comment

Damith on 30 May 2014
Thanks a lot. It worked.

Udit Gupta on 30 May 2014
This is simple if you use matlab lower triangle functions. See the example code below please.
A = magic(39) % Your Martix
B = A';

Geoff Hayes on 30 May 2014
That's neat!
Damith on 31 May 2014
Great! Both works. Thanks guys.