Asked by MOHAMMED ABDELGHANI BOUCHAALA
on 18 Nov 2019 at 15:35

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 ?

Answer by James Tursa
on 18 Nov 2019 at 17:55

Edited by James Tursa
on 18 Nov 2019 at 17:58

Accepted 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);

MOHAMMED ABDELGHANI BOUCHAALA
on 18 Nov 2019 at 21:59

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.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.