我想找到一个矢量的所有可能的变化(组合),从该矢量中选择不同数量的元素。
例如,假设我有矢量:
x = [1 2 3 4 5];
我可以确定每个选定元素数量的组合数量:
x = [1 2 3 4 5]';
n = numel(x);
for k = 1:n
combs(k) = nchoosek(n,k);
end
sum(combs)
这导致:
combs = 5 10 10 5 1
sum(combs) = 31
我想要一种方法将所有这31个组合存储在一个数组中,例如一个单元格数组,其中n
个单元格,每个都是一个数组,其中每一行都是元素的向量组合。 / p>
e.g。在k = 4
:
combs{4} =
1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5
是否存在执行此操作的现有功能,或者最简单的方法是什么?
答案 0 :(得分:2)
答案 1 :(得分:0)
以下是使用dec2bin,find和accumarray的方法:
x = [1 2 3 4 5];
[a b] = find(dec2bin(1:2^numel(x)-1)=='1');
combs = accumarray(a,x(b),[],@(c){c});