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 12个元素取出来,顺次排列,就变成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
按列重新排列原来的矩阵,从小到大

### MATLAB 中 `sort` 函数的使用方法 #### 基本功能描述 `sort` 是 MATLAB 提供的一个内置函数,主要用于对数组或矩阵中的元素按照特定顺序进行排序。它可以处理一维向量、二维矩阵甚至多维数组,并支持多种排序方式。 #### 参数说明 - **基本形式**: 当输入为一维向量时,`sort(A)` 将返回该向量按升序排列的结果[^3]。 - **二维矩阵**: 对于二维矩阵,默认情况下会对每列单独进行升序排序- **自定义维度**: 可通过第二个参数指定沿着哪个维度进行排序。例如,对于矩阵 A,`sort(A,2)` 表示对每一行内的元素进行排序[^2]。 - **高级选项**: 支持额外的名称-值对参数来调整排序行为。比如 `'ComparisonMethod'` 参数可以改变比较的方式,如基于绝对值大小排序 (`'abs'`) 或者实部虚部关系 (`'real'`, `'imag'`)[^1]。 #### 示例代码展示 以下是几个典型的例子: ```matlab % 示例 1: 升序排列简单的一维数组 A = [4, 1, 7]; [B, idx] = sort(A); % B 返回排序后的结果; idx 记录原始索引位置 disp(B); disp(idx); % 示例 2: 排序二维矩阵 (默认逐列操作) M = [9, 8, 7; 6, 5, 4; 3, 2, 1]; sorted_M_col = sort(M); % 默认按列排序 disp(sorted_M_col); % 示例 3: 按照行方向排序 sorted_M_row = sort(M, 2); % 沿第二维度(即行)排序 disp(sorted_M_row); % 示例 4: 使用 'ComparisonMethod' C = [-3+4i, -1-i, 0]; D_abs_sorted = sort(C, 'ComparisonMethod', 'abs'); % 按照模长从小到大排序 disp(D_abs_sorted); ``` 以上展示了如何利用不同的参数配置实现多样化的数据整理需求。 #### 注意事项 需要注意的是,在调用 `sort` 的时候如果希望获取原数据的位置映射,则应该采用双输出的形式 `[B,idx]=sort(...)` ,其中 `idx` 数组记录了对应变换前后的下标关联情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值