概述
MATLAB M个向量 元素遍历组合
假设存在M个变量,每个变量具有N_{1}, N_{2}, N_{3}, … , N_{M}个元素,计算从每个向量中取一个元素构成的所有组合。
使用循环可以很容易的得到所有组合,但是计算时间太长了,应该也可以通过元胞函数的调用实现这样一个事情。但是我这里所有向量的维度都是一样的,更简单一些,所以写了一个折中的代码和思路。
如果每个向量的长度是不一样的时候,仍然可以基于这个思路去写代码,也不会很复杂。
对于我们期望得到的数组,比如有向量{1 2 3}, {4 5 6}, { 7 8 9},期望得到的矩阵是
[1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3;
4 4 4 5 5 5 6 6 6 4 4 4 5 5 5 6 6 6 4 4 4 5 5 5 6 6 6;
7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 7 8 9 ]
可以发现,每一行都是由原始矩阵的展开,然后自我复制得到的,因此对于期望得到的矩阵的每一行有以下关系:
行数 自我展开 复制
1 N_{2}* N_{3}* …N_{M} 1
2 N_{3} N_{4}* …N_{M} N_{1}
3 N_{4} N_{5}* …N_{M} N_{1} N_{2}
*
*
M-1 N_{M}· N_{1}* N_{2}* …N_{M-2}
M 1· N_{1} N_{2}* …*N_{M-1}
生成的每一行元素个数都是相同的,附上所有向量长度一样的时候的代码,长度不同的时候需要自己计算一下展开和复制的次数:
%从不同向量中选择一个元素的所有组合,输入v的每一行都是长度相等的
function set=cal_combination(v)
[m,n]=size(v);
for i=1:m
base=repmat(v(i,:),1,n.^(m-i));
base=sort(base);
set(i,:)=repmat(base,1,n^(i-1))
end
最后
以上就是独特便当为你收集整理的MATLAB M个向量 元素遍历组合MATLAB M个向量 元素遍历组合的全部内容,希望文章能够帮你解决MATLAB M个向量 元素遍历组合MATLAB M个向量 元素遍历组合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复