2013-05-29 33 views
3

我試圖從一個大矩陣得到3個3個面具成矢量。目前,這是我的代碼:Matlab:加速大循環

A=rand(3264,2448) 

[rows cols]=size(A); 

T=zeros(9,prod(size(A)-2)); 

for i=1:rows-2 

    for j=1:cols-2 

    T(:,(i-1)*cols+j)=reshape(A(i:i+2,j:j+2),[9 1]); 

    end 

end 

目前,這需要相當長的時間。我能以任何方式加速嗎?我正在考慮meshgrid和arrayfun,但不能完全擺脫他們的困擾。

謝謝!

+0

我猜'A'是不是在實際情況下,隨機值?從大矩陣中提取掩碼(內核)的順序是否重要?目前,您似乎首先查看列,然後遞增行。一個簡單的加速是不要調用'reshape',而是這樣做:'Ai = A(i:i + 2,j:j + 2); T(:,(I-1)* COLS + J)=艾(:);'。這在我的機器上快了大約50%。 – horchler

+0

A是實際情況下的圖像數據。順序無關緊要,因爲我們將把每個掩模看作9維空間中的一個點。 – user2434350

+0

以下約快30%: j = 1; i = 1:prod(size(A)) - 2 * rows-2 testrow = mod(i,rows); (i,i + 1; i + 2; i +行; i +行+1; i + 1行)行+ 2; I + 2項*的行; I + 2 *行+ 1; I + 2個*行+ 2]); 結束 結束 – user2434350

回答

3

您可以使用im2col圖像塊重新組合成列,例如:

T = im2col(A,[3 3],'sliding');