2017-11-20 16 views
-1

私はこのコードブロックを使用して、e行を持つ行列の行の可能な組み合わせをすべて取得しています。次のようにコードは次のとおりです。見つからない組み合わせを見つける

sample = [1 1 ; 2 2; 3 3]; 
v = []; 
for i = 1:size(sample,1)-1 
    v = [v;(sample(i,:))]; 
    for j = 1:size(sample,1) 
      if isequal(ismember(sample(j,:),v,'rows'),0) 
       display([v;sample(j,:)]); 
      else 
       j = j+1; 
      end 
    end 
end 

このコードは私に次のように出力できます:

ans =  
    1  1 
    2  2 


ans =  
    1  1 
    3  3 


ans =  
    1  1 
    2  2 
    3  3 

をしかし、私はこのような出力必要がありますだけの小さな変更はに十分だろう

ans =  
    1  1 


ans =  
    2  2 


ans =  
    3  3 


ans =  
    1  1 
    2  2 


ans =  
    1  1 
    3  3 


ans =  
    2  2 
    3  3 


ans =  
    1  1 
    2  2 
    3  3 

を希望の結果を得る。

+1

[?我々はnchoosek使用することができますどのように()行列の行のすべての組み合わせを取得する]の可能な重複(https://stackoverflow.com/questions/47204269/how-can-we-use-nchoosek-to-all-the-the-matrix-of-a-matrixの組み合わせ) – etmuse

+0

いいえ私はnchosek関数を使用せずにこれをしたい! –

+0

既存のメソッドを保持するには、ソリューションの一部が 'v'をリセットする必要があります。または、行1がないと組み合わせることはできません(おそらく' i'ループのどこかを制御する別のループもあります)。 – etmuse

答えて

0

これは何について:

% getting the number of rows 
n_row = size(sample,1); 
% calculating all possible permutations of the rows 
v = perms([1:n_row]); 
disp('---') 
% now we iterate over the permutations, as you want to have matrixes of 1, 
% 2 and 3 rows 
for i = 1: size(v,2) 
    idx1 = v(:,1:i); 
    % remove repeated answers 
    idx1 = unique(idx1,'rows'); 
    % now we iterate over the answers and display 
    for j = 1:size(idx1,1) 
     idx2 = idx1(j,:); 
     answer = sample(idx2,:); 
     disp(answer) 
     disp('---') 
    end  
end 
関連する問題