2012-07-04 99 views
0

我使用combnk來生成一個組合列表。但是,結果形狀不是我所需的數據。我想例如用於combnk(1:3,2)組合,子集,MATLAB

1 1 0 
0 1 1 
1 0 1 

1 2 
1 3 
2 3 

我該怎麼辦呢?如何以最佳方式更改combnk以提供結果?

回答

0

難道你的意思是你想

1 1 0 
1 0 1 
0 1 1 

代替

1 2 
1 3 
2 3 

使每一行是原始載體v邏輯選擇向量?

您可以通過以下得到:

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