0

combnk組み合わせのリストを生成するために使用します。しかし、結果の形状は私の必要なデータではありません。たとえば、次のようにしcombnk(1:3,2)ます。

1 1 0  
0 1 1
1 0 1

いいえ

1 2
1 3
2 3

どうすればできますか?combnk結果を出すために最適な方法で変更するにはどうすればよいですか?

4

2 に答える 2

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
于 2012-07-04T14:18:45.123 に答える
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
于 2012-07-04T14:45:44.333 に答える