2014-11-24 5 views
1

나는 10, 15, 18, ...과 같은 n 상태를 가지고 있으며 길이가 m 인 배열에서 내 상태의 가능한 모든 조합을 생성하려고합니다.배열에서 n 개의 요소를 모두 조합하여 생성하려면 어떻게해야합니까?

예를 들어, m=5n=2 (states={10,15}) 경우,이 예와 같이 모든 가능한 조합을 생성 할 :

comb = { 10 10 10 10 15 

     10 10 10 15 10 

     10 10 10 15 15 

     ... 

     15 15 15 15 10 } 

10, 15 각 행의 하나 개의 가능한 조합으로 구성한다. MATLAB에서이 배열을 생성하는 방법은 무엇입니까?

+0

제안 된 결과에서 각 조합의 가능한 상태 중 하나 이상을 원한다는 것입니다 (즉, '10 10 10 10 10'또는 '15 15 15 15 15'조합을 원하지 않는 것 같습니다)) 그 경우 귀하의 질문에 해당 요구 사항을 추가하십시오! –

+0

입력으로'벡터 = {[10 15] [10 15] [10 15] [10 15] [10 15]}; –

답변

0

한 가지 방법은 다음과 같습니다이 mn)의 높은 값에 대한 끔찍한 성능을

m = 4; 
n = 2; 
states = [10, 15]; 
v = mod(perms(1:(2*(m-1))),n) + 1; 
ind = unique(v(:,1:m),'rows'); 
comb = states(ind) 

comb = 

    10 10 10 15 
    10 10 15 10 
    10 10 15 15 
    10 15 10 10 
    10 15 10 15 
    10 15 15 10 
    10 15 15 15 
    15 10 10 10 
    15 10 10 15 
    15 10 15 10 
    15 10 15 15 
    15 15 10 10 
    15 15 10 15 
    15 15 15 10 

하는 것으로.

0

시도 뭔가 같은 :

n = 5; 
states = [10,15]; 
m = numel(states); 
sz = m*ones(1,n); 
idx = {0}; 
idx = repmat(idx,1,n); 
comb = zeros(m^n,n); 
for i = 1:(m^n) 
[idx{:}] = ind2sub(sz,i); 
comb(i,:) =states([idx{:}]); 
end 

이 당신에게 모든 가능한 조합을주고 매트릭스 comb에 넣어 것이다; 그 후에 원하지 않는 조합을 모두 소트 할 수 있습니다. 관심이없는 조합은 분명하지 않습니다 (예를 들어, 같은 상태의 모든 요소가 아닌 조합 일 수도 있고 각 상태의 모든 요소가 아닌 조합 일 수도 있습니다). 상태).

관련 문제