I have a matrix which first row indicates index numbers and second indicated the data. For example it goes like this:
1 2 3 4 5 6
23 45 10 90 11 34
I want to sort these descending but I don't want to loose the corresponding index either.
4 2 6 1 5 3
90 45 34 23 11 10
I have a large amount of data so it needs to be efficient too. How can I do that?

 Akzeptierte Antwort

Julia
Julia am 23 Okt. 2014
Bearbeitet: Julia am 23 Okt. 2014

2 Stimmen

Hi,
A =
1 2 3 4 5 6
23 45 10 90 11 34
>> A=A'
A =
1 23
2 45
3 10
4 90
5 11
6 34
>> B=sortrows(A,-2)
B =
4 90
2 45
6 34
1 23
5 11
3 10
>> B=B'
B =
4 2 6 1 5 3
90 45 34 23 11 10
Or short:
B=(sortrows(A',-2))'
B =
4 2 6 1 5 3
90 45 34 23 11 10

Weitere Antworten (3)

Torsten
Torsten am 23 Okt. 2014

1 Stimme

B=(sortrows(A',-2))';
where A is your input matrix.
Best wishes
Torsten.
Geoff Hayes
Geoff Hayes am 23 Okt. 2014

0 Stimmen

Ege - consider using sortrows to perform the above task
A = [1 2 3 4 5 6
23 45 10 90 11 34];
B = sortrows(A',-2)';
We transpose A so that we can sort on the second column. The negative indicates descending sort order. The result is then transposed to get the desired output as
B =
4 2 6 1 5 3
90 45 34 23 11 10
Guillaume
Guillaume am 23 Okt. 2014
Bearbeitet: Guillaume am 23 Okt. 2014

0 Stimmen

Transpose your matrix, use sortrows along the second column, transpose it back and flip it left to right to get descending order
m = [1 2 3 4 5 6
23 45 10 90 11 34];
fliplr(sortrows(m', 2)')

Kategorien

Gefragt:

Ege
am 23 Okt. 2014

Bearbeitet:

am 23 Okt. 2014

Community Treasure Hunt

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

Start Hunting!

Translated by