Filter löschen
Filter löschen

permutations and combinations of column

1 Ansicht (letzte 30 Tage)
Jen-Yu Hsiao
Jen-Yu Hsiao am 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]

Antworten (2)

Sean de Wolski
Sean de Wolski am 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 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 10 Sep. 2012
result=C(idx)
Sean de Wolski
Sean de Wolski am 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...

Melden Sie sich an, um zu kommentieren.


Azzi Abdelmalek
Azzi Abdelmalek am 10 Sep. 2012
Bearbeitet: Azzi Abdelmalek am 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

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by