# All possible combinations for fixed columns?

1 view (last 30 days)
Daniel on 5 Dec 2014
Edited: Henrik on 6 Dec 2014
Hey folks,
I'm attempting to build an algorithm that generates a 2^n x n matrix of values where n is the size of an input matrix made of two vectors that represent the minimum (first column) and maximum (second column) of values, respective.
For instance, if: input = [-1 1; -2 2]; output should be something like: [1 2; -1 -2; 1 -2; -1 2];
I looked at using nchoosek for this. However, when finding all possible combination, it includes columns being shifted around as such:
Theta =
-1 1 -2 2
>> C = nchoosek(Theta,2)
C =
-1 1
-1 -2
-1 2
1 -2
1 2
-2 2
For higher order systems (n >= 3), this becomes even more complicated. Is there anyway I can use nchoosek or another algorithm with if statements to solve for the correct output, am I using the incorrect function to solve this, or should I build my own algorithm?
I appreciate any feedback.
- Dan

Henrik on 6 Dec 2014
Edited: Henrik on 6 Dec 2014
I don't know how fast this will be for large n, but this seems to do what you want. You can probably vectorize at least one of the loops.
input=[-1 0 1; 2 4 6];
sz=size(input);
output=zeros(sz(2)^2,2);
for k=0:sz(2)-1
for l=1:sz(2)
output(k*sz(2)+l,:)=[input(1,k+1) input(2,l)];
end
end
output
EDIT: changed the preallocation.
##### 2 CommentsShowHide 1 older comment
Henrik on 6 Dec 2014
... And here's a full vectorization
input=[-1 0 1; 2 4 6];
sz=size(input);
C1=repmat(input(1,:),sz(2),1);
C1=C1(:);
C2=repmat(input(2,:).',sz(2),1);
output=[C1 C2]