matlab多个长度为3的数组,个数不确定,怎么从每一个数组中取一个数字,得到全排列

假如有3个数组,分别为a b c。其全排列用matlab可以计算出,方法为
[a b c]=ndgrid(a,b,c)
[a(:) b(:) c(:)]
问题是,我的数组个数是不确定的,是随着另外的变量发生变化的,应该怎么做?

这个不叫全排列吧,应该叫全组合。

 

编了个函数给你:

function C = allcombs(varargin)
n = nargin;
if n < 2, error('Insufficient input'); end
s = '[x1';
for i=2:n
    s = [s sprintf(',x%i',i)];
end
s = [s ']=ndgrid(varargin{:});'];
eval(s);
s = '[x1(:)';
for i=2:n
    s = [s sprintf(',x%i(:)',i)];
end
s = [s ']'];
C = eval(s);

 

调用示例:

a = [1 2];
b = [3 4 5];
c = [6 7];
C = allcombs(a,b,c)

 

运行结果

C =
     1     3     6
     2     3     6
     1     4     6
     2     4     6
     1     5     6
     2     5     6
     1     3     7
     2     3     7
     1     4     7
     2     4     7
     1     5     7
     2     5     7

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-16
首先是提取放到一个数组里。这可以用eval函数+对应命名的表示式实现。然后再计算全排列。追问

能不能给个具体事例呢?

第2个回答  2014-04-16
首先是提取放到一个数组里。这可以用eval函数+对应命名的表示式实现。然后再计算全排列。追问

能不能给个具体事例呢?

相似回答
大家正在搜