permutations and combinations of column

1 vue (au cours des 30 derniers jours)
Jen-Yu Hsiao
Jen-Yu Hsiao le 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]

Réponses (2)

Sean de Wolski
Sean de Wolski le 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 commentaires
Azzi Abdelmalek
Azzi Abdelmalek le 10 Sep 2012
result=C(idx)
Sean de Wolski
Sean de Wolski le 11 Sep 2012
@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...

Connectez-vous pour commenter.


Azzi Abdelmalek
Azzi Abdelmalek le 10 Sep 2012
Modifié(e) : Azzi Abdelmalek le 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

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by