组合,子集,MATLAB

时间:2012-07-04 13:37:47

标签: matlab combinations

我使用combnk生成组合列表。但是,结果形状不是我需要的数据。我希望例如combnk(1:3,2)

1 1 0  
0 1 1
1 0 1

不是

1 2
1 3
2 3

我该怎么办?如何以最佳方式更改combnk以获得结果?

2 个答案:

答案 0 :(得分: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

答案 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