# How to create a matrix out of all the possible combinations of a vector

9 views (last 30 days)

Show older comments

Hi !

I want to fill a vector with specifice numbers of 1's and -1's, and the rest are zeros. And get all possible combinations in each row of a matrix.

For example, if I have a vector of length 12 and I want to have 5 elements = +1 and 4 elements = -1

Then, the results should be like:

M=[1 1 1 1 1 -1 -1 -1 -1 0 0 0; 0 0 0 1 1 1 1 1 -1 -1 -1 -1; -1 1 1 1 1 1 -1 -1 -1 0 0 0; .....]

and every other distinct combination of the three numbers.

##### 0 Comments

### Accepted Answer

Andrei Bobrov
on 23 Jul 2019

Edited: Andrei Bobrov
on 23 Jul 2019

In your case:

a = 3:5;

v = [0,-1,1];

n = cumsum(a,'reverse');

C1 = nchoosek(1:n(1),a(1)); % Here are the two calls on 'nchoosek'

C2 = nchoosek(1:n(2),a(2));

M = ones(size(C1,1)*size(C2,1),n(1)); % First, fill M with all 1's

k1 = 0;

for k2 = 1:size(C1,1)

p1 = C1(k2,:); % Use C1 to generate indices for inserting 0's

q1 = 1:n(1);

q1(p1) = []; % These indices will point to -1 and 1 locations

for k3 = 1:size(C2,1)

p2 = C2(k3,:); % Use C2 to generate indices for inserting -1's

k1 = k1 + 1; % Advance the row index of M

M(k1,p1) = v(1); % Insert 0's

M(k1,q1(p2)) = v(2); % and -1's

end

end

##### 2 Comments

Rik
on 23 Jul 2019

### More Answers (1)

Rik
on 23 Jul 2019

https://www.mathworks.com/help/matlab/ref/perms.html

##### 2 Comments

Rik
on 23 Jul 2019

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!