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.
Thanks in advance,

 Akzeptierte Antwort

Geoff Hayes
Geoff Hayes am 30 Mai 2014
Bearbeitet: Geoff Hayes am 30 Mai 2014

0 Stimmen

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

Weitere Antworten (1)

Udit Gupta
Udit Gupta am 30 Mai 2014

2 Stimmen

This is simple if you use matlab lower triangle functions. See the example code below please.
A = magic(39) % Your Martix
mask = tril(true(39),-1);
X = A(mask);
B = A';
Y = B(mask);

2 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

am 30 Mai 2014

Kommentiert:

am 31 Mai 2014

Community Treasure Hunt

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

Start Hunting!

Translated by