1D array combinations

Hi all,
I have a 1D array containing numbers from 1 to 5.
A = [1
2
3
4
5]
How can I find all possible combinations (without doubles), so that...
B = [1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
2
2 3
etc.]
I tried a number of combinators from the FEX but they don't give me the result I'm after.
Thanks!

1 个评论

are you looking for something like the function perms?
doc perms

请先登录,再进行评论。

 采纳的回答

Stephen23
Stephen23 2016-2-23
编辑:Stephen23 2016-2-23
This will generate a cell array of all combinations of all possible lengths:
C = cell(size(A));
for k = 1:numel(C)
C{k} = nchoosek(A,k);
end
contained inside this cell array:
>> C{:}
ans =
1
2
3
4
5
ans =
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
ans =
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
ans =
1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5
ans =
1 2 3 4 5
Without padding they will not fit into one numeric array, as they have different number of columns. To pad them try this:
C = cell(size(A));
for k = 1:numel(C)
tmp = nchoosek(A,k);
C{k} = [tmp,NaN(size(tmp,1),numel(A)-k)];
end
N = cell2mat(C);
which creates this numeric array:
>> N
N =
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
5 NaN NaN NaN NaN
1 2 NaN NaN NaN
1 3 NaN NaN NaN
1 4 NaN NaN NaN
1 5 NaN NaN NaN
2 3 NaN NaN NaN
2 4 NaN NaN NaN
2 5 NaN NaN NaN
3 4 NaN NaN NaN
3 5 NaN NaN NaN
4 5 NaN NaN NaN
1 2 3 NaN NaN
1 2 4 NaN NaN
1 2 5 NaN NaN
1 3 4 NaN NaN
1 3 5 NaN NaN
1 4 5 NaN NaN
2 3 4 NaN NaN
2 3 5 NaN NaN
2 4 5 NaN NaN
3 4 5 NaN NaN
1 2 3 4 NaN
1 2 3 5 NaN
1 2 4 5 NaN
1 3 4 5 NaN
2 3 4 5 NaN
1 2 3 4 5

更多回答(1 个)

Jos (10584)
Jos (10584) 2016-2-23
编辑:Jos (10584) 2016-2-23
My function NCHOOSE will create those combinations without (slowly) looping over nchoosek. Each combination is stored in a cell. The cell array can be easily transformed into a 2D array by padding the entries with NaNs using PADCAT.
C = nchoose(1:5)
A = padcat(C{:})
NCHOOSE and PADCAT can be downloaded here:

3 个评论

+1 nice solution.
+1 Thank you!
I'm having trouble understanding what exactly the function "bitget" is doing, is there a way to see how this function is working using a for-loop? Thanks!

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Descriptive Statistics 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by