Generate all possible combinations for the column vectors of a matrix

9 views (last 30 days)
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 ?

Accepted Answer

James Tursa
James Tursa on 18 Nov 2019
Edited: James Tursa on 18 Nov 2019
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);
  1 Comment
MOHAMMED ABDELGHANI BOUCHAALA
Thank you for your answer, this does exactly what i need.
Is there anything you recommend to accelerate the code knowing that:
  • I have a long 'B' vector (length(B)=100)), constitued of consecutive decimal numbers.
  • I need only the rows of 'C' that sums to a given number 'S'.

Sign in to comment.

More Answers (0)

Categories

Find more on Structures in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!