Matlab学习笔记(6)——sort和sortrows对矩阵排序

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

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

你可能感兴趣的:(matlab)