You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab类似sortrows的忽略首行降序排序列实现方法问询

实现忽略首行对矩阵列降序排序的Matlab方案

Matlab没有内置专门的列排序函数,但可以通过转置+sortrows的组合快速实现需求,和你此前的使用逻辑完全兼容。

写法1(复用你已有代码逻辑)

你之前实现忽略第一列按其余列给行降序排序,现在要忽略首行按其余行给列降序排序,只要给矩阵做两次转置即可:

% 原始矩阵
B = [1     1     0     0     0     0     0     0     0     1
     2     0     1     0     0     0     0     1     0     0
     3     0     0     1     0     1     0     0     1     0
     4     0     1     0     0     0     1     1     0     0
     5     0     0     1     0     0     0     0     1     0
     6     0     0     0     0     0     1     1     0     0
     7     1     0     0     1     0     0     0     0     0
     8     0     0     1     0     1     0     0     0     0];

% 核心代码:转置后忽略第一列降序排序,再转置恢复结构
sorted_B = sortrows(B.', -[2:size(B,1)]).';

逻辑说明:

  • 转置操作B.'会把原矩阵的列转为行,原矩阵首行元素就变成了转置后矩阵的第一列,刚好匹配你此前忽略第一列排序的场景
  • 负号代表降序排序,[2:size(B,1)]是指定排序范围为转置后的第2列到最后一列,对应原矩阵除首行外的所有行
  • 第二次转置恢复原矩阵的行列结构,首行元素会跟随所属列一起移动,不会被修改

写法2(可读性更高)

你也可以先提取排序索引,再直接重排原始矩阵的列,逻辑更直观:

% 提取忽略首行的子矩阵,转置后降序排序得到列索引
[~, col_order] = sortrows(B(2:end,:).', 'descend');
% 按索引重排原矩阵的列
sorted_B = B(:, col_order);

两种写法输出的结果都和你给出的预期输出完全一致。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:03