MATLAB Answers

1

permutations and combinations of column

Asked by Jen-Yu Hsiao on 10 Sep 2012
If there are two matrices
A=[1 2 3 4];
B=[5 6 7 8];
How can I create this
C=[ 1 2 3 4;
1 2 3 8;
1 2 7 4;
1 2 7 8;
1 6 3 4;
1 6 3 8;
1 6 7 4;
1 6 7 8;
5 2 3 4;
5 2 3 8;
5 2 7 4;
5 2 7 8;
5 6 3 4;
5 6 3 8;
5 6 7 4;
5 6 7 8]

  0 Comments

Sign in to comment.

2 Answers

Answer by Sean de Wolski
on 10 Sep 2012

A=[1 2 3 4];
B=[5 6 7 8];
AB = [A;B];
idx = fullfact([2 2 2 2]);
C = AB(sub2ind([2 4],idx,repmat(1:4,size(idx,1),1)))
This won't be sorted. You could presort idx so that it is:
idx = sortrows(idx,1:4)

  2 Comments

@Azzi: That won't work because idx is only referencing the row in AB. We need the column information also. Of course, if speed is the primary goal, a for-loop will smoke sub2ind() and day of the week...

Sign in to comment.


Answer by Azzi Abdelmalek
on 10 Sep 2012
Edited by Azzi Abdelmalek
on 10 Sep 2012

A=[1 2 3 4];B=[5 6 7 8];
C=[];n=length(A);
for k=1:n
un=ones(2^(n-k),1);
C=[C repmat([A(k)*un; B(k)*un],2^(k-1),1)];
end

  0 Comments

Sign in to comment.