reorganize two related matrices in ascending order

1 Ansicht (letzte 30 Tage)
Tomás Nunes
Tomás Nunes am 16 Apr. 2018
Kommentiert: dpb am 19 Apr. 2018
I have two matrices, one with -1 and 1's and another with returns that are related to the number in the previous matrix. However, the -1 and 1's aren't organized, in the sense that their position varies in each row. What I pretend is a matrix with the -1's in the first couple of rows and the 1's in the last ones, given that the returns in the second matrix change positions as well. For example:
-1 1 -1 1
-1 -1 1 1
1 1 -1 -1
1 -1 1 -1
0.1 -0.3 2 0.5
-0.9 0 1 1.5
1.5 1.2 0 -0.3
0.9 0.1 1.2 0.3
and I wish to have:
-1 -1 1 1
-1 -1 1 1
-1 -1 1 1
-1 -1 1 1
0.1 2 -0.3 0.5
-0.9 0 1 1.5
0 -0.3 1.5 1.2
0.1 0.3 0.9 1.2
is this possible? I hope I was clear. Thank you

Akzeptierte Antwort

Stephen23
Stephen23 am 19 Apr. 2018
Bearbeitet: Stephen23 am 19 Apr. 2018

This is easy with sub2ind:

>> A0 = [-1,1,-1,1;-1,-1,1,1;1,1,-1,-1;1,-1,1,-1]
A0 =
  -1   1  -1   1
  -1  -1   1   1
   1   1  -1  -1
   1  -1   1  -1
>> B0 = [0.1,-0.3,2,0.5;-0.9,0,1,1.5;1.5,1.2,0,-0.3;0.9,0.1,1.2,0.3]
B0 =
   0.10000  -0.30000   2.00000   0.50000
  -0.90000   0.00000   1.00000   1.50000
   1.50000   1.20000   0.00000  -0.30000
   0.90000   0.10000   1.20000   0.30000
>> [A1,idc] = sort(A0,2); % sort, get column indices
>> A1 =
  -1  -1   1   1
  -1  -1   1   1
  -1  -1   1   1
  -1  -1   1   1
>> Sz = size(A0);
>> idr = repmat(1:Sz(1),Sz(2),1).'; % get row indices
>> B1 = B0(sub2ind(Sz,idr,idc)) % convert column&row indices to linear.
B1 =
   0.10000   2.00000  -0.30000   0.50000
  -0.90000   0.00000   1.00000   1.50000
   0.00000  -0.30000   1.50000   1.20000
   0.10000   0.30000   0.90000   1.20000
  1 Kommentar
dpb
dpb am 19 Apr. 2018
Good on ya' Stephen, for repmat; I kept trying to be excessively klever in applying sub2ind w/ just the single vector...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

dpb
dpb am 16 Apr. 2018
[A,ix]=sort(A,2);
for i=1:size(A,1), B(i,:)=B(i,ix(i,:)); end

Bound to be a way to write the indexing but it's not coming to me at the moment...

Kategorien

Mehr zu Financial Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by