MATLAB: Generate all possible combinations for the column vectors of a matrix

allcombcombinationsmatrix columns combinations

If B=[1; 2] and A=[B B B…(n times B)], how to obtain the matrix C corresponding to all the possible combinations between the column vectors of A .i.e. i want to get the combinations between n copies of the same vector :
For example, for n=3 :
A =
1 1 1
2 2 2
So, 'C' can be obtained using "allcomb" function: "C=allcomb(A(:,1),A(:,2),A(:,3))"
C =
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
In my case n is variable. How to obtain C for any value of n ?

Best Answer

E.g.,
>> B = [1;2];
>> n = 3;
>> Bcell = arrayfun(@(k)B,1:n,'uni',false);
>> C = allcomb(Bcell{:})
Warning: NARGCHK will be removed in a future release. Use NARGINCHK or NARGOUTCHK
instead.
> In allcomb (line 63)
C =
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
2 2 2
>> n = 4;
>> Bcell = arrayfun(@(k)B,1:n,'uni',false);
>> C = allcomb(Bcell{:})
Warning: NARGCHK will be removed in a future release. Use NARGINCHK or NARGOUTCHK
instead.
> In allcomb (line 63)
C =
1 1 1 1
1 1 1 2
1 1 2 1
1 1 2 2
1 2 1 1
1 2 1 2
1 2 2 1
1 2 2 2
2 1 1 1
2 1 1 2
2 1 2 1
2 1 2 2
2 2 1 1
2 2 1 2
2 2 2 1
2 2 2 2
Another way to make Bcell is
Bcell = {B}; Bcell(2:n) = Bcell(1);