我想在我的代码中考虑电源设置。我希望在每个循环中,我获得{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]。当然,我希望n可以是任意的数字,比如说可以是100。我可以考虑列出所有的案例,但是有什么方法可以完成我的任务吗?
发布于 2019-05-04 19:26:26
nchoosk应该找到所有的k-long组合。我建议以下解决方案:
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意味着你只取1011等于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);https://stackoverflow.com/questions/55980925
复制相似问题