tags:

views:

48

answers:

3

I have array say "a"

a =

 1     4     5
 6     7     2

if i use function b=sort(a)

gives ans

b =

 1     4     2
 6     7     5

but i want ans like

b =

 5     1     4
 2     6     7

mean 2nd row should be sorted but elements of ist row should remain unchanged and should be correspondent to row 2nd.

A: 

You can use the SORT function on just the second row, then use the index output to sort the whole array:

[junk,sortIndex] = sort(a(2,:));
b = a(:,sortIndex);
gnovice
junk can be replaced with:[~, sortIndex] This is a little cleaner in newer versions of MATLAB
MatlabDoug
Unfortunately, it is very not backward compatible, and can be horribly embarrassing when you code for users who use slightly older versions of Matlab.
Jonas
A: 

How about

a = [1 4 5; 6 7 2]
a =
     1     4     5
     6     7     2
>> [s,idx] = sort(a(2,:))
s =
     2     6     7
idx =
     3     1     2
>> b = a(:,idx)
b =
     5     1     4
     2     6     7

in other words, you use the second argument of sort to get the sort order you want, and then you apply it to the whole thing.

Matt Mizumi
+3  A: 

sortrows(a',2)'

Pulling this apart:

a =  1     4     5
     6     7     2

a' = 1 6
     4 7
     5 2

sortrows(a',2) = 5 2
                 1 6
                 4 7

sortrows(a',2)' = 5 1 4
                  2 6 7

The key here is sortrows sorts by a specified row, all the others follow its order.

MatlabDoug