Matlab代码优化--向量化

         前段时间改写老师的一个计算纳米细颗粒物的C语言程序,不过运行的效率实在是太低了,工作站跑都很吃劲,晚上看了冈萨雷斯的数字图像处理意外发现了问题所在。在将C语言的程序改写成Matlab程序的时候我还是保持的写C语言的想法,上来全是for循环而忽视了Matlab的矩阵操作。

       这里举的例子是冈萨雷斯的书里面的一个例子,比较的是f(x,y)=A sin(u0x+v0y),用for循环和向量化代码实现,具体如下:

function [rt,f,g] = twodsin(A,u0,v0,M,N)
tic         %开始时间
for r = 1:M
    u0x = u0*(r-1);
    for c = 1:N
        v0y = v0*(c-1);
        f(r, c) = A*sin(u0x+v0y);
    end
end
t1  = toc;  %结束时间

tic         %开始时间
r = 0:M-1;
c = 0:N-1;
[C,R] = meshgrid(c,r);
g = A*sin(u0*R+v0*C);
t2 = toc;    %结束时间
rt = t1/(t2+eps);

测试代码:
[rt,f,g] = twodsin(1, 1/(4*pi), 1/(4*pi), 512, 512);

输出:
rt =    4.0483   (Intel Core i5 CPU 2.67GHz)

可以看出for循环和向量化操作的差距,冈萨雷斯书中给出的是34.2520,这里是因为电脑配置不同的缘故。

输出图像:

kk

原文地址:https://www.cnblogs.com/ksheep/p/3165985.html