Matlab中如何按指定行对矩阵列进行排序?
按指定行对MATLAB矩阵列排序的方法
当然有啦!在MATLAB里实现这个需求超级简单,核心就是用sort函数获取指定行的排序索引,再用这个索引重排列矩阵的列就行。我结合你的例子给你演示:
步骤1:定义原矩阵
先把你给出的矩阵赋值:
A = [1 3 4; 1 0 5; 3 2 1];
步骤2:获取指定行的排序索引
你需要按最后一行排序,所以我们提取最后一行,用sort函数的第二个输出参数拿到排序后的元素在原行中的位置(也就是列的索引):
[~, sort_idx] = sort(A(end, :)); % 用~忽略排序后的数值,只取索引;end代表最后一行
这里sort_idx的结果是[3,2,1],意思是原矩阵的第3列、第2列、第1列按最后一行的升序排列。
步骤3:用索引重排列矩阵
直接用这个索引对原矩阵的列进行重新排列:
sorted_matrix = A(:, sort_idx);
运行这段代码后,得到的sorted_matrix就是你想要的结果:
4 3 1 5 0 1 1 2 3
额外小技巧
- 如果想要降序排序,只需要给
sort加一个'descend'参数:[~, sort_idx_desc] = sort(A(end, :), 'descend'); sorted_matrix_desc = A(:, sort_idx_desc); - 如果要按其他行排序,比如第2行,只需要把
A(end, :)换成A(2, :)就行,非常灵活!
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

