2011-07-07 6 views
0

可能な重複するアイテムのすべての組み合わせを列挙:
Matlab - Generate all possible combinations of the elements of some vectorsMATLAB:セットの任意の数で

は、私は3セットを持っていると言う:

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

私は希望しますそのようなセットの任意の数をとり、それらのすべての組み合わせを吐き出すことができるMATLAB関数を作成するs。の

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 

:上記の例では、それは私がこのような何かをやって考えることができる唯一の方法は、folowsとしてループのネストされたを使用している

[5 0 11 
5 0 22 
5 0 33 
5 1 11 
5 1 22 
5 1 33 
... 
7 1 33] 

の線に沿って何かを吐き出すだろうもちろん、これはあらかじめセットの数を指定しなければ機能しません - この問題を回避するには単純な修正かもっとスマートな方法があるのでしょうか?ここではMATLABファイル交換から

答えて

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); 
+0

は、@ dave85のリンクと基本的に同じです。私はコードを書いたので、私はそれを投稿すると思った。 – mor22

関連する問題