Вы можете попробовать использовать randi
и сгенерировать случайные комбинации из 7 целых чисел от 1 до Nelements, а затем проверить, что у вас есть только уникальные комбинации:
Nelements=100;
M=10;
combsubset=randi(Nelements,[M 7]);
combsubset=unique(combsubset,'rows');
Если вы хотите получить точно M комбинаций, вы можетеиспользуйте цикл:
Nelements=100;
M=10;
combsubset=[];
while(size(combsubset,1)<M)
combsubset=[combsubset;randi(Nelements,[M 7])];
combsubset=unique(combsubset,'rows');
end
combsusbet=combsubset(1:M,:);
Если вы хотите использовать это повторно для получения других комбинаций, вы можете использовать тот же код:
Nelements=100;
Mtotal=20
M=10;
while(size(combsubset,1)<Mtotal)
combsubset=[combsubset;randi(Nelements,[M 7])];
combsubset=unique(combsubset,'rows');
end
combsusbet=combsubset(1:Mtotal,:);
РЕДАКТИРОВАТЬ : ДругойМетод для ваших нужд будет в том, чтобы упорядочить комбинации, чтобы иметь возможность получить только заданное подмножество.Один из способов их упорядочения можно объяснить на следующем примере: если у вас есть три индекса i, j, k в диапазоне от 0 до N-1, вы можете использовать уникальный индекс n=i*N*N+j*N+k
, чтобы просмотреть все возможности.Тогда, если вы хотите получить n-й вектор:
k=mod(n,N);
j=mod((n-k)/N,N);
i=mod((((n-k)/N)-j)/N,N);
Я не знаю, найдете ли вы это более элегантным, но с помощью небольшой функции, которая использует рекурсию, вы легко могли бы получить фиксированное подмножество вашегокомбинации.