MatLab 2016b中如何按非降序对指定向量的值进行分组?
在Matlab 2016b中实现向量的非降序分组
当然可以在Matlab 2016b中完成这个需求!从你给出的期望结果来看,核心是把原向量分割成指定长度的连续子块,再对每个子块单独做非降序排序。下面是具体的实现步骤和代码:
步骤说明
- 定义原始向量:先把你提供的
values向量准确输入到Matlab中; - 指定分组长度:根据你期望的A-E组的元素个数,定义每个组的长度列表;
- 分割原始向量:用
mat2cell函数把原向量按指定长度分割成单元格数组,每个单元格对应一个原始子块; - 子块内部排序:用
cellfun批量对每个单元格里的子向量做非降序排序,得到最终的分组结果。
完整代码示例
% 定义原始向量 values = [1 1 1 7 17 74 89 91 96 1 5 32 43 78 84 95 98 100 0 0 15 31 69 88 94 97 100 100 100 0 2 12 42 66 78 83 89 94 97 1 6 34 63 65 75 89 93 98]; % 定义每个分组的元素长度(对应A-E组) group_lengths = [9, 9, 11, 10, 9]; % 将原始向量分割为对应长度的子块单元格数组 raw_groups = mat2cell(values, 1, group_lengths); % 对每个子块内部执行非降序排序 groups = cellfun(@(x) sort(x, 'ascend'), raw_groups, 'UniformOutput', false); % 提取并命名各个分组 groupA = groups{1}; groupB = groups{2}; groupC = groups{3}; groupD = groups{4}; groupE = groups{5};
结果验证
运行这段代码后,每个分组的结果会和你期望的完全一致:
groupA:[1 1 1 7 17 74 89 91 96]groupB:[1 5 32 43 78 84 95 98 100]groupC:[0 0 15 31 69 88 94 97 100 100 100]groupD:[0 2 12 42 66 78 83 89 94 97]groupE:[1 6 34 63 65 75 89 93 98]
内容的提问来源于stack exchange,提问作者pseudorandom
相关产品推荐
相关产品推荐

