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

 採用された回答

Star Strider
Star Strider 2014 年 8 月 26 日

1 投票

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

6 件のコメント

Omid Ameri Sianaki
Omid Ameri Sianaki 2014 年 8 月 26 日
編集済み: Omid Ameri Sianaki 2014 年 8 月 26 日
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 2014 年 8 月 26 日
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 2014 年 8 月 26 日
編集済み: Star Strider 2014 年 8 月 26 日
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 2014 年 8 月 26 日
編集済み: Image Analyst 2014 年 8 月 26 日
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 2014 年 8 月 26 日
編集済み: Image Analyst 2014 年 8 月 26 日
Awesome! Perfect Answer. Thank you very much. Yes it was what I wanted and I appreciate for your time.
Star Strider
Star Strider 2014 年 8 月 26 日
My pleasure!
That was a really fun problem for me!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeShifting and Sorting Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by