2016-05-07 14 views
1

Ich habe zwei Matrizen, von denen eine (sagen wir Matrix H) ist 4x2 und die andere (Matrix N) ist 100x2. Ich möchte für jedes Paar von N eine Kombination machen, jedes Paar von H. enthältKombination von Matrizen

Grundsätzlich, wenn meine

H = [2 2; 2 4; 4 2; 4 4] 
N = [1 1; 1 2; 1 3; ...; 
    10 8; 10 9; 10 10] 

Ich möchte eine letzte Matrix

M = [1 2 2 1; 1 2 4 1; 1 4 2 1; 1 4 4 1; 1 2 2 2; 1 2 4 2; ...; 10 4 4 10] 

haben, eine Größe 100x4 (weil jedes Paar von N multipliziert wird | H | = 4 Mal.)

Also werden alle Paare der H-Matrix zwischen allen Paaren meiner N-Matrix sein.

Ich hoffe, ich bin klar genug.

+2

Mit H 4x2 Matrix und N 10x2 Matrix sein, sollte Ihre endgültige Matrix nicht 40x4 statt 100x4 sein? –

Antwort

2

die follwing Syntax:

%calculates the Cartesian multipication of 1:size(h,1) and 1:size(N,1) 
sets = {1:size(H,1), 1:size(N,1)}; 
[hInds, nInds] = ndgrid(sets{:}); 

%generates the output matrix 
outRes = [N(nInds(:),1),H(hInds(:),1),H(hInds(:),2),N(nInds(:),2)]; 

Teilergebnisse (nur die ersten Zeilen des Ausgangs anzeigt):

outRes = 
1  2  2  1 
1  2  4  1 
1  4  2  1 
1  4  4  1 
1  2  2  2 
1  2  4  2 
1  4  2  2 
1  4  4  2 
1  2  2  3 
1  2  4  3 
1  4  2  3 
1  4  4  3 
... 

Beachten Sie, dass, wenn N 4x2 und N sind 10x2, die Endmatrix Größe wird 40x4 sein und nicht 100x4 wie du erwähnt hast.

+1

Danke. Es funktioniert, und ich meinte 100x2 für | N |, tut mir leid. –

+0

Ich bin froh, dass es geholfen hat :) – drorco

1

Try this:

H= [2 2; 2 4; 4 2; 4 4]; 
N= fix(100*(rand(10,2))) % Replace this with your N matrix 

iter=0; 
for i=1:10 
for j=1:4 
    iter=iter+1; 
A(iter,:)=[N(i,1), H(j,1:2), N(i,2)]; 
end 
end 

A 
+0

Danke, ich suchte trotzdem nach einer Lösung ohne eine for-Schleife, aber das scheint auch zu funktionieren. –