我是靠谱客的博主 独特便当,最近开发中收集的这篇文章主要介绍MATLAB M个向量 元素遍历组合MATLAB M个向量 元素遍历组合,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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个向量 元素遍历组合所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部