2012-07-04 7 views
0

나는 combnk을 사용하여 조합 목록을 생성합니다. 그러나 결과 모양이 내 필요한 데이터가 아닙니다. 나는 combnk(1:3,2)에 대한 예를 들어 원하는 : 내가 그것을 어떻게조합, 부분 집합, MATLAB

을 할 수
1 2 
1 3 
2 3 

하지
1 1 0 
0 1 1 
1 0 1 

? 결과를 내기 위해 combnk을 어떻게 바꿀 수 있습니까?

답변

0

당신은 각 행이 원래 벡터 v에 대한 논리적 선택 벡터이다 그래서 대신

1 2 
1 3 
2 3 

1 1 0 
1 0 1 
0 1 1 

원하는 의미하지 않는다?

다음에 이것을 얻을 수

:

v = 1:3; 
k = 2; 

tmp = combnk(v,k); 
M = size(tmp,1); 

output = false(M,numel(v)); 
output(sub2ind(size(output),repmat((1:M)',1,k),tmp))=true; 

결과 :

output = 

    1  1  0 
    1  0  1 
    0  1  1 
0

또 다른 해결책 :

c = combnk(1:3,2); 
r = repmat(1:size(c,1), [1 size(c,2)]); 
output = full(sparse(r,c(:),1)) 

결과 :

output = 
    1  1  0 
    1  0  1 
    0  1  1 
관련 문제