我使用combnk
生成组合列表。但是,结果形状不是我需要的数据。我希望例如combnk(1:3,2)
:
1 1 0
0 1 1
1 0 1
不是
1 2
1 3
2 3
我该怎么办?如何以最佳方式更改combnk
以获得结果?
答案 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