nchoosk должен найти все k-длинные комбинации.Я предлагаю следующее решение:
n = 3;
index = {};
for ii = 1:n
k = nchoosek(1:n,ii);
c = num2cell(k,2);
index(end+1:end+length(c),1) = c;
end
Другой подход - использовать двоичную систему, где 001 означает, что вы берете только 1, 011 равно [1,2], 111 равно [1,2,3] и т. Д.Затем вы можете получить его с помощью dec2bin без цикла:
isChosen = dec2bin(1:2^n-1) == '1';
Однако, если мы должны иметь его в качестве массива ячеек, вы перебираете строки:
index1 = {};
for ii = 1:size(isChosen,1)
index1{ii,1} = find(isChosen(ii,:));
end
И затем, если вы настаиваете на разумном заказе:
[~,order] = sort(cellfun(@sum,index1));
index1 = index1(order);