2015-12-04 573 views
4

我喜歡在MATLAB中合併兩個不同尺寸的矩陣,而不使用循環,因爲我已經用循環完成了它。如何在matlab中合併兩個不同尺寸的矩陣

下圖顯示了我想實現的目標。

我也試過這個鏈接,但是這不是我想要的:Merging two matrices of different dimension in Matlab?

這是我嘗試用循環來做到這一點:

A=zeros(2,9)-1; 
B=ones(6,3); 
disp(A); 
disp(B); 
C=zeros(max(size(A,1),size(B,1)),max(size(A,2),size(B,2))); 

for i=1:1:size(A,1) 
    C(i,:)=A(i,:); 
end 
for i=1:1:size(B,2) 
    C(:,i)=B(:,i); 
end 
disp(C); 

所需的輸出應該是像這樣:

A: 
    -1 -1 -1 -1 -1 -1 -1 -1 -1 
    -1 -1 -1 -1 -1 -1 -1 -1 -1 

B: 
    1  1  1 
    1  1  1 
    1  1  1 
    1  1  1 
    1  1  1 
    1  1  1 

C: 
    1  1  1 -1 -1 -1 -1 -1 -1 
    1  1  1 -1 -1 -1 -1 -1 -1 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 

但是,我在不使用循環的情況下尋找更好的方法。

回答

4

這可以純粹通過索引來完成。首先聲明你的輸出矩陣C像之前,然後用A取代C前兩排,然後用B取代C前三列:

%// Your code 
A=zeros(2,9)-1; 
B=ones(6,3); 
C=zeros(max(size(A,1),size(B,1)),max(size(A,2),size(B,2))); 

%// New code 
C(1:size(A,1),:) = A; 
C(:,1:size(B,2)) = B; 

我們得到:

>> C 

C = 

    1  1  1 -1 -1 -1 -1 -1 -1 
    1  1  1 -1 -1 -1 -1 -1 -1 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 
    1  1  1  0  0  0  0  0  0 
+0

如何我可以在矩陣維的基礎上概括這個2&3的值嗎?C(1:2,:) = A; C(:,1:3)= B;如果我分別採取A和B的最小尺寸,一般情況下是否正確? –

+0

@ShvetChakra我編輯了代碼以使其更一般。這將首先檢查'A'中的總行數,並用'C'替換這些行。之後,我們查看'B'中的總列數,並用'C'替換這些列。沒有錯誤檢查,因此您需要確保'A'中的總行數和'B'中的總列數可以放在'C'的正確維度中,但是您在創建時確保這一點在任何情況下都是最初的'C'矩陣。 – rayryeng