matlab排序之sort()函数和sortrows()函数

sortrows()函数的格式:

sortrows(A,column)

A是一个矩阵,如果没有第二个参数column,则默认按照第一列升序排列,如果遇到重复数字,则按照第二列升序排列,依次类推。。。

如果存在第二个参数column,则按照指定的列排序,当指定的列有重复元素的时候,则重复元素所在的行保持原来的顺序,且不按第二列排序。

举例:

A =[82 42 51;

      9 47 79;
    37 47 29;
    37 55 56;
    42 54 58]

sortrows(A)的结果:

ans =

9 47 79
37 47 29
37 55 56
42 54 58
82 42 51

 

sortrows(A,2)的结果:

ans =

82 42 51
9 47 79
37 47 29
42 54 58
37 55 56

 



 

 

sort和sortrows对矩阵排序

 

 

sort函数排序

 

在处理问题时,排序是一个非常常见的需求。sort函数是Matlab内置的排序函数,可以满足常用的排序需求。sort函数的基本形式如下

[Y,I] = sort(X,DIM,MODE)
  • Y表示对X排序后的结果
  • I 表示Y中对应元素原来在X中的下标

  • mode的默认值是‘ascend’升序排列,‘descend’为降序排列

  • DIM的默认值是1,如果X是矩阵,则默认对矩阵的各个列进行升序排列,即sort(X,1)与sort(X)等效(矩阵在matlab中是按列存储的)
  • sort(X,2)表示对矩阵的各行中的元素按照升序排列
  • 如果X是行向量,则Y与I也是行向量;如果X是列向量,则Y与I也是列向量,如果X是矩阵,则Y与I是与X维数相同的矩阵
    -由于在排序的时候保留了数据在原数组的下标信息,所以排序是可逆的。如果[Y,I] = sort(X,DIM,MODE)X是排序前的向量,Y是排序后的向量,I是下标的索引,则X=Y(I),可以还原原来的向量。

DEMO1

>> X = fix(rand(1,5)*10)

X =

     7     1     4     6     4

>> [Y,I] = sort(X)

Y =

     1     4     4     6     7


I =

     2     3     5     4     1

>> X = fix(rand(5,1)*10)

X =

     4
     6
     0
     0
     0

>> [Y,I] = sort(X)

Y =

     0
     0
     0
     4
     6


I =

     3
     4
     5
     1
     2

>> X = fix(rand(3,5)*10)

X =

     8     9     4     3     8
     6     0     2     4     9
     4     1     6     1     0

>> [Y,I] = sort(X)

Y =

     4     0     2     1     0
     6     1     4     3     8
     8     9     6     4     9


I =

     3     2     2     3     3
     2     3     1     1     1
     1     1     3     2     2

>> [Y,I] = sort(X,2)

Y =

     3     4     8     8     9
     0     2     4     6     9
     0     1     1     4     6


I =

     4     3     1     5     2
     2     3     4     1     5
     5     2     4     1     3

sortrows函数

[Y,I]=sortrows(X,Colnum)
  • sortrows函数可以使用矩阵的某列值的大小对矩阵行进行排序,就像excel 中按照某列排序并扩展选定区域一样。
  • X是待排序的矩阵
  • Colnum 是列的序号,指定按照第几列进行排序,正数表示按照升序进行排序,负数表示按照降序进行排序
  • Y是排序后的矩阵
  • I 排序后的行在之前矩阵中的行标

Demo2

>> X = fix(rand(3,5)*10)

X =

     8     9     4     3     8
     6     0     2     4     9
     4     1     6     1     0

>> [Y,I]=sortrows(X,1)

Y =

     4     1     6     1     0
     6     0     2     4     9
     8     9     4     3     8


I =

     3
     2
     1

>> [Y,I]=sortrows(X,-2)

Y =

     8     9     4     3     8
     4     1     6     1     0
     6     0     2     4     9


I =

     1
     3
     2

自己写的例子:

K>> aa=[6,3;22,8;99,51,;4,75]

aa =

6 3
22 8
99 51
4 75

bb=sortrows(aa,1)

bb =

4 75
6 3
22 8
99 51

cc=fliplr(bb)

cc =

75 4
3 6
8 22
51 99

K>> dd=sortrows(aa,1,'descend')

dd =

99 51
22 8
6 3
4 75


K>> ee=sortrows(aa,-1)

ee =

99 51
22 8
6 3
4 75

可见:dd=sortrows(aa,1,'descend')和ee=sortrows(aa,-1)的效果是一样的,都是按照某一列实现矩阵的降序排列。

cc=fliplr(bb)是把矩阵的第一列和第二列进行互换。

注:对矩阵行的排序排序方法都可以用在矩阵列的排序中,因为矩阵有个转置运算,行列式可以互换的,可以将对列的运算转化成对行的运算

 http://blog.csdn.net/liuweiyuxiang/article/details/78036572?utm_source=blogxgwz0

posted on 2018-11-03 20:13  一杯明月  阅读(18489)  评论(0编辑  收藏  举报