我想考虑代码中设置的功率。我想在每个循环中都获得{1,2,3,...,n}
的子集。例如,n=3
。在第一个循环中,我想提取数字1并存储在变量Index
中。最终,我想在第二个循环中获得Index=2
,在第三个循环中获得Index=3
,在第四个循环中获得Index=[1,2]
,在第五个循环中,Index=[1,3]
获得{ }在第六循环中,Index=[2,3]
在第七循环中。当然,我希望Index=[1,2,3]
可以是任意数字,可以是100。我可以考虑列出所有案例,但是有什么方法可以完成我的任务?
答案 0 :(得分:1)
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);