Matlab學習筆記(6)——sort和sortrows對矩陣排序
阿新 • • 發佈:2019-02-11
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
注:對矩陣行的排序排序方法都可以用在矩陣列的排序中,因為矩陣有個轉置運算,行列式可以互換的,可以將對列的運算轉化成對行的運算