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
相关产品推荐
相关产品推荐

