2012-11-28 82 views
0

例如,我有2x2矩陣,現在我必須增加其左側和右側各1列,然後頂部和底部各1行,現在我將有一個4x4矩陣與舊的矩陣位於新的矩陣的中心。有什麼辦法可以快速完成,而不是創建新的並將值從舊的轉移到新的?
非常感謝你智能擴展矩陣在matlab

+0

有關使用圖像處理工具箱執行此操作的一些方法,請參閱http://stackoverflow.com/q/8287289/462117 – nandhp

回答

4

無論你做什麼,你都將不得不爲新的陣列分配新的內存。另外,如果你的矩陣只有2×2,任何方法的速度都足夠好。或者你還想處理更大的矩陣?然後,考慮兩種方法下面的測試,你可以使用:

A = rand(5000); 

% explicitly add zero vectors on all sides of A 
tic; 
B = [zeros(1, size(A,1)+2); 
    zeros(size(A, 2),1) A zeros(size(A, 2),1); 
    zeros(1, size(A,1)+2)]; 
toc 

Elapsed time is 0.204940 seconds. 

% create the output array and assign the A array to correct sub-matrix 
tic 
B = zeros(size(A)+2); 
B(2:end-1,2:end-1) = A; 
toc 

Elapsed time is 0.102501 seconds. 
+0

+1,用於建議分析您的代碼 – jedwards

+0

請問您可以爲我解釋這行代碼嗎? 「B(2:end-1,2:end-1)= A;」 – Xitrum

+0

@Aptos閱讀[MATLAB中的矩陣索引](http://www.mathworks.se/company/newsletters/articles/Matrix-Indexing-in-MATLAB/matrix.html;jsessionid=92d1cab9d60af8757dc730078854)。該命令在兩個維度上從索引2開始並結束於結尾1,分配給「B」。由於B的維數是A + 2的維數,因此可以將其分配給正確大小的子矩陣(即大小(A)) – angainor

2

另一種選擇是

B = padarray(A,[1,1],'both'); 

對於速度(至少在我的電腦),這是由angainor建議的兩種方法之間,而且它的優點是你不需要創建一個新的變量,如果你不想。