MATLAB:枚举任意数量的项目的所有组合

时间:2011-07-07 07:39:52

标签: matlab

  

可能重复:
  Matlab - Generate all possible combinations of the elements of some vectors

说我有三套:

A = [5 6 7]
B = [0 1]
C = [11 22 33]

我想创建一个MATLAB函数,它可以接受任意数量的这样的集合并吐出所有组合。在上面的例子中,它会吐出一些

的内容
[5 0 11
 5 0 22
 5 0 33
 5 1 11
 5 1 22 
 5 1 33
 ... 
 7 1 33]

我能想到做这样的事情的唯一方法是使用嵌套的for循环:

output = zeros(length(A)*length(B)*length(C), 3)
row = 1

for i = 1:length(A)
     for j = 1:length(B)
         for k = 1:length(C)

         output(row,:) = [A(i) B(j) C(k)];
         row = row + 1;

         end
      end
end

当然,如果事先没有指定套数,这是行不通的 - 所以我想知道是否有一个简单的修复或其他更明智的解决这个问题的方法?

2 个答案:

答案 0 :(得分:2)

从MATLAB文件交换中尝试allcomb

allcomb

答案 1 :(得分:1)

这是一个快速函数,如果输入是一个单元格数组,它将起作用。

function comb=allcomb(ip)

ncells=length(ip);
[nd{1:ncells}]=ndgrid(ip{:});
catted=cat(ncells,nd{1:ncells});
comb=reshape(catted,length(catted(:))/ncells,ncells);