2012-07-04 2 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 
Смежные вопросы