Octave如何生成矩阵的所有非重复无序列组合子矩阵与向量
Octave实现所有非空无序列组合的方法
你要的结果本质是矩阵列索引的所有非空无序子集,直接用Octave内置的nchoosek生成组合即可,具体实现代码如下:
完整实现代码
% 你的输入矩阵A,示例用随机5行4列矩阵演示,可替换为你自己的矩阵 A = randn(5, 4); n_cols = size(A, 2); % 用cell数组存储不同列数的结果 res = {}; % 遍历所有子集大小:从1列到全部列 for subset_size = 1 : n_cols % 生成当前大小的所有列索引组合 idx_combinations = nchoosek(1:n_cols, subset_size); % 逐个取出对应列存入结果 for i = 1 : size(idx_combinations, 1) res{end+1} = A(:, idx_combinations(i, :)); end end
结果说明
res是存储所有结果的cell数组,顺序和你给出的示例完全一致:- 第1~4个元素对应单列组合
[C1]、[C2]、[C3]、[C4] - 第5~10个元素对应两列组合,从
[C1 C2]到[C3 C4] - 第11~14个元素对应三列组合,最后一个元素为四列全选的组合
- 第1~4个元素对应单列组合
- 代码可适配任意列数的矩阵,不需要针对4列硬编码,修改输入矩阵A即可直接使用。
如果需要验证结果对应的列索引,可以添加以下代码打印:
for m = 1 : length(res) fprintf("第%d个结果对应的列序号:%s\n", m, num2str(idx_combinations(m,:))); end
内容的提问来源于stack exchange,提问作者George21
相关产品推荐
相关产品推荐

