2016-05-07 130 views
1

我有兩個矩陣,其中一個(假設矩陣H)是4x2,另一個矩陣(矩陣N)是100x2。 我想爲每對N的組合,包含每對H的矩陣的組合

基本上,如果我

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

我想有一個最終的矩陣

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] 

大小爲100×4(因爲每對N將乘以| H | = 4次)。

所以所有的H矩陣對都將在我的N矩陣的所有對之間。

我希望我很清楚。

+2

使用H是4×2矩陣,N爲10X2矩陣,不應該最終矩陣是40x4而不是100x4? –

回答

2

使用follwing語法:

%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)]; 

部分結果(顯示剛輸出的第一行):

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 
... 

注意,如果N是4×2,而N是10X2,最終的矩陣正如你所提到的,大小將是40x4而不是100x4。

+1

謝謝。它的工作原理,我的意思是| N |的100x2,對此很抱歉。 –

+0

我很高興它幫助:) – drorco

1

試試這個:

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

謝謝,無論如何我正在尋找一個沒有for循環的解決方案,但這似乎也工作。 –