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