1. 程式人生 > >Matlab學習筆記(6)——sort和sortrows對矩陣排序

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

注:對矩陣行的排序排序方法都可以用在矩陣列的排序中,因為矩陣有個轉置運算,行列式可以互換的,可以將對列的運算轉化成對行的運算