MATLAB中如何生成可变数量向量的所有组合矩阵
MATLAB可变数量向量生成全组合矩阵实现方案
方案1:使用官方combvec(需深度学习工具箱)
不需要手动逐个输入参数,只需要将所有待组合向量存入元胞数组,通过元胞展开语法传入即可:
% 将任意数量的输入向量存入元胞数组,n个向量就对应元胞的n个元素 vec_cell = {1:3, 2:4, 7:9}; % 可根据实际需求增减向量数量 % 自动展开元胞为combvec的输入参数,输出和combvec(v1,v2,...vn)完全一致 res = combvec(vec_cell{:});
方案2:无工具箱自定义实现
如果没有安装深度学习工具箱无法使用combvec,可使用如下兼容基础MATLAB环境的自定义函数,同样支持任意数量输入向量:
自定义函数代码
function res = custom_combvec(vec_cell) vec_num = length(vec_cell); vec_lens = cellfun(@length, vec_cell); total_combs = prod(vec_lens); res = zeros(vec_num, total_combs); rep_cnt = 1; tile_cnt = total_combs; for k = 1:vec_num tile_cnt = tile_cnt / vec_lens(k); res(k,:) = repmat(repelem(vec_cell{k}, rep_cnt), 1, tile_cnt); rep_cnt = rep_cnt * vec_lens(k); end end
调用示例
vec_cell = {1:3, 2:4}; res = custom_combvec(vec_cell);
输出结果和官方combvec输出完全匹配。
内容的提问来源于stack exchange,提问作者ThomasIsCoding
相关产品推荐
相关产品推荐

