File Exchange Pick of the Week

September 11th, 2007

MATLAB Basics video: Sorting matrices

This video covers how to sort a matrix, either sorting each column independently or sorting such that the original rows stay together. Most new users are able to find the SORT command without much problem, but the very useful SORTROWS is often missed.

Find the files here.

Other videos have been gathered here:
http://blogs.mathworks.com/pick/category/video/

Other MATLAB Basics posts have been gathered here:
http://blogs.mathworks.com/pick/category/matlab-basics/

11 Responses to “MATLAB Basics video: Sorting matrices”

  1. slaesche replied on :

    Good tip! Just what I was looking for. Thanks.

  2. mayank replied on :

    Hi,I want to sort the coordiantes.How to do this?
    Eg- 1 0
    3 2
    21 0
    4 4
    2 3
    5 4
    so that the sorted coordinates come out to be:
    1 0
    21 0
    3 2
    2 3
    4 4
    5 4

  3. Doug replied on :

    Mayank,

    Please watch the video again. You will see Sortrows at the end. This is the function you are looking for.

    Doug

  4. Sanchay Subhedar replied on :

    I am getting this error on using simple sort function on the same magic square as your.

    ??? Index exceeds matrix dimensions.

    How can I “sort” this problem ;-)

  5. Doug replied on :

    Sanchay,

    You need to show all the relevant code to get help.

    Doug

  6. Renato replied on :

    Hi, is there any function that does the same as sortrows but for columns?

    Thx for your time!

  7. Doug replied on :

    Renato,

    What you need to do is use the transpose operator (‘) to transpose the rows to columns. Then you can use sort rows and transpose right back.

    Doug

  8. Mark replied on :

    Hello,

    I need to sort the pixel intensity values of an image in descending order, but then also be able to keep track of each intensities original coordinate in the image. I assume I will need to create an Nx3 matrix where N is the total number of pixels and the 3 column values are: 1. the pixel intensity, 2. the original col, and 3. the row coordinate.

    Could you help me to get started doing this?

    Thanks,
    Mark

  9. Doug replied on :

    @Mark

    http://www.mathworks.com/access/helpdesk/help/techdoc/ref/sort.html

    Use sort with the second output argument. That gives the absolute index, but you can use IND2SUB to get back to row and column.

    -Doug

  10. Fred replied on :

    Doug,
    I have a set of coordinates for the perimeter of an object in random order. I want to plot these using the statement

    plot(X, Y, '-');
    

    so that I get a continuous line plot of the object perimeter. This requires getting the x coordinates representing the top half of the object in increasing order, but the x coordinates for the bottom half of the object in decreasing order.

    I have tried to get the coordinates sorted using dummy columns in a matrix using code such as below and using sortrows:

    coords = [X Y X>mean(X) Y<mean(Y)];
    coords = sortrows(coords, [4 1 3 2]);
    plot(coords(:,1), coords(:,2), '-r');
    

    This doesn’t quite work and I get a horizontal line across the middle of my object. I feel I am close using this approach, but I just can’t get it. Any suggestions?
    Thanks.
    Fred

  11. Doug replied on :

    From the convhull doc

    http://www.mathworks.com/access/helpdesk/help/techdoc/ref/convhull.html

    xx = -1:.05:1; yy = abs(sqrt(xx));
    [x,y] = pol2cart(xx,yy);
    k = convhull(x,y);
    plot(x(k),y(k),'r-',x,y,'b+')
    

    This should get you where you are going.

Leave a Reply

Wrap code fragments inside <pre> tags, like this:

<pre class="code">
a = magic(3);
sum(a)
</pre>

If you have a "<" character in your code, either follow it with a space or replace it with "&lt;" (including the semicolon).


MathWorks

Brett & Jiro share their favorite user-contributed submissions from the File Exchange.

These postings are the author's and don't necessarily represent the opinions of The MathWorks.