zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    输入汉字转拼音
    DBGridEh(RestoreGridLayoutIni)用法
    当选中节点的同时选中父节点
    implsments
    HTML中的post和get
    SmartUpload中文乱码
    调查平台,考试系统类型的数据收集型项目
    final
    职业生涯中12个最致命的想法
    abstract
  • 原文地址:https://www.cnblogs.com/ksheep/p/3165985.html
Copyright © 2011-2022 走看看