2013-05-29 34 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');