reorganize two related matrices in ascending order

2 vues (au cours des 30 derniers jours)
Tomás Nunes
Tomás Nunes le 16 Avr 2018
Commenté : dpb le 19 Avr 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

Réponse acceptée

Stephen23
Stephen23 le 19 Avr 2018
Modifié(e) : Stephen23 le 19 Avr 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 commentaire
dpb
dpb le 19 Avr 2018
Good on ya' Stephen, for repmat; I kept trying to be excessively klever in applying sub2ind w/ just the single vector...

Connectez-vous pour commenter.

Plus de réponses (1)

dpb
dpb le 16 Avr 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...

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by