matlab中的sort函数详解

在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可, 如果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A 中项的索引。排序是安升序进行的。
   在Matlab中,访问矩阵中的元素,一维用A(1)访问向量A的第一个元素;(下标从1开始);二维用A(1,2)访问A中第一行,第二列的元素。
   由于在sort函数的结果中,是安升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:
X=eye(size(A));
X=rot90(X);
A=A*X; 
复制代码
假如a是一个2*n的矩阵,即两行.
b=a(1,:);
[c,pos]=sort(b); %pos为排序后的下标,c为第一行的排序结果
a(2,:)=a(2,pos); %第二行按照第一行排序的下标对应
a(1,:)=c;              %第一行结果重新赋给a 的第一行 
复制代码
以下适用于m*n的矩阵按第一行排序
[ b, pos ] = sort( a( 1, : ) );
a = a( :, pos );
X=magic(5)
X =
17 24 1 8 15 
23 5 7 14 16 
4 6 13 20 22 
10 12 19 21 3 
11 18 25 2 9
>> [a,b]=sort(X,2)
a =
1 8 15 17 24 
5 7 14 16 23 
4 6 13 20 22 
3 10 12 19 21 
2 9 11 18 25
b =
3 4 5 1 2 
2 3 4 5 1 
1 2 3 4 5 
5 1 2 3 4 
4 5 1 2 3
结果解释: 
a是原来的矩阵x按照行,每行从小到大重新排列得到的新矩阵。 
b告诉你重排的详细信息,也就是做了什么样的变动。 
例如b的第一行显示3 4 5 1 2,那么将原矩阵X的第一行的第3 4 5 1 2个元素取出来,顺次排列,就变成a矩阵的第一行。
sort(X,2) 和sort(X,1)分别意思如下
x =
3 7 5
0 4 2
sort(x,2)
ans =
3 5 7
0 2 4
按行重新排列原来的矩阵,从小到大
sort(x,1)
ans =
0 4 2
3 7 5

按列重新排列原来的矩阵,从小到大


=====================



B = sort(A)   %沿着输入参量 A的不同维的方向、从小到大重新排列 A中的元素。A 可以是字符串的、实数的、复数的单元数组。对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块;若 A 为复数的,则按元素幅值的从小到大排列,若有幅值相同的复数元素,则再按它们在区间[-π ,π ]的幅角从小到大排列;若 A 中有元素为NaN,则将它们排到最后。若 A为向量,则返回从小到大的向量,若A为二维矩阵,则按列的方向进行排列;若A为多维数组,sort(A)把沿着第一非单元集的元素像向量一样进行处理。

B=sort(A,dim) %沿着矩阵A中指定维数dim方向重新排列A中的元素。

[B,IX]=sort(A); %其中IX是一个大小等于size(A)的数组,其每一列是A中列向量的元素相对应的置换位置记号。

举例:A = [ 3 3 5
      0 4 2 ];

sort(A,1) %纵向排列

ans =

     0     3     2
     3     4     5

sort(A,2) %横向排列

ans =

     3     3     5
     0     2     4

>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i]; 
>>[B1,INDEX] = sort(A)

计算结果为: 
    B1 = 
        Columns 1 through 4 
          -0.2000      -1.9000       3.1416         2.4000 + 3.6000i 
        Columns 5 through 6 
           5.6000      7.0000 
    INDEX = 
          2     1     3     6     4     5

由此可知,如果A与另一个矩阵C(char或cell)一一对应,如果用[B1,INDEX] = sort(A)对A进行排序,则可以取得索引INDEX,进而可以查询B1中每个元素与C中哪一个对应。


B = sort(A)   %沿着输入参量 A的不同维的方向、从小到大重新排列 A中的元素。A 可以是字符串的、实数的、复数的单元数组。对于 A 中完全相同的元素,则按它们在 A 中的先后位置排列在一块;若 A 为复数的,则按元素幅值的从小到大排列,若有幅值相同的复数元素,则再按它们在区间[-π ,π ]的幅角从小到大排列;若 A 中有元素为NaN,则将它们排到最后。若 A为向量,则返回从小到大的向量,若A为二维矩阵,则按列的方向进行排列;若A为多维数组,sort(A)把沿着第一非单元集的元素像向量一样进行处理。

B=sort(A,dim) %沿着矩阵A中指定维数dim方向重新排列A中的元素。

[B,IX]=sort(A); %其中IX是一个大小等于size(A)的数组,其每一列是A中列向量的元素相对应的置换位置记号。

举例:A = [ 3 3 5
      0 4 2 ];

sort(A,1) %纵向排列

ans =

     0     3     2
     3     4     5

sort(A,2) %横向排列

ans =

     3     3     5
     0     2     4

>>A = [-1.9, -0.2, 3.1415926, 5.6, 7.0, 2.4+3.6i]; 
>>[B1,INDEX] = sort(A)

计算结果为: 
    B1 = 
        Columns 1 through 4 
          -0.2000      -1.9000       3.1416         2.4000 + 3.6000i 
        Columns 5 through 6 
           5.6000      7.0000 
    INDEX = 
          2     1     3     6     4     5

由此可知,如果A与另一个矩阵C(char或cell)一一对应,如果用[B1,INDEX] = sort(A)对A进行排序,则可以取得索引INDEX,进而可以查询B1中每个元素与C中哪一个对应。

你可能感兴趣的:(matlab)