I appreciate if anyone could help me for writing below sorting for different vectors: Assumed :
A1= (a1,a2)
A2= (a3,a4)
A3=(a5,a6)
.
.
An= (ai, aj)
How can I sort A1, A2, … ,An. by just first member comparison descending order (1) or second comparison (2), or both member comparison (3): solution : (for example)
1) a3>a1>a5 ---> output: A2, A1, A5...
or
2) a6>a4>a2 ----> output: A3,A2,A1
3) a1>a3 >a5 and a2>a4 >a6 --->output: A1, A2,A3

 Réponse acceptée

Star Strider
Star Strider le 26 Août 2014

1 vote

The sortrows function is probably what you want. See specifically Sort Rows of a Matrix

6 commentaires

Omid Ameri Sianaki
Omid Ameri Sianaki le 26 Août 2014
Modifié(e) : Omid Ameri Sianaki le 26 Août 2014
Thank you Star Strider, The out put is very important for me. I want to reach to A1, A2, A3. after sorting the matrix I can not figure out A1,A2,A3 orders. Can you help me please.
Star Strider
Star Strider le 26 Août 2014
My pleasure!
Can you be a bit more specific about what A1 ... An are, and what a1, a2, ... ai, aj are? Are they individual array elements, vectors, or something else?
Omid Ameri Sianaki
Omid Ameri Sianaki le 26 Août 2014
Modifié(e) : Star Strider le 26 Août 2014
Thank you. For example:
a=[1,5,9];
b=[2,6,10];
c=[3,7,11];
d=[4,8,12];
e=[a;d;b;c]
B=sortrows(e)
then the answer is
B =
1 5 9
2 6 10
3 7 11
4 8 12
so I want the above matrix (solution)to show me the vectors name instead of value. for above example B=[a;b;c;d] I mean I made e with vector names but I received a vector with values how can I reach to a sorted matrix with vector names?
Star Strider
Star Strider le 26 Août 2014
Modifié(e) : Image Analyst le 26 Août 2014
Superb! It took some experimenting, but this seems to work:
a=[1,5,9];
b=[2,6,10];
c=[3,7,11];
d=[4,8,12];
ec = {'a' 'd' 'b' 'c'}; % Matrix as cell array by vector name
e = cell2mat(cellfun(@eval, ec, 'uni',0)') % Create matrix from ‘ec’
[B,I] = sortrows(e) % Sort rows
vn = ec(I) % Sorted vector names
I created a cell array of the vector names in ‘ec’ in the order you want them in matrix ‘e’. I then created matrix ‘e’ by evaluating the cell array in the order you specified, using cellfun and then creating a numerical matrix from it with cell2mat. I then sorted ‘e’ with sortrows, and used the index vector ‘I’ to create the sorted array names in ‘vn’.
My code produces:
e =
1 5 9
4 8 12
2 6 10
3 7 11
B =
1 5 9
2 6 10
3 7 11
4 8 12
I =
1
3
4
2
vn =
'a' 'b' 'c' 'd'
Is that what you want?
Omid Ameri Sianaki
Omid Ameri Sianaki le 26 Août 2014
Modifié(e) : Image Analyst le 26 Août 2014
Awesome! Perfect Answer. Thank you very much. Yes it was what I wanted and I appreciate for your time.
Star Strider
Star Strider le 26 Août 2014
My pleasure!
That was a really fun problem for me!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by