前段时间改写老师的一个计算纳米细颗粒物的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,这里是因为电脑配置不同的缘故。

输出图像:

Matlab代码优化--向量化的更多相关文章

  1. Matlab代码优化之道

    一. 遵守Performance Acceleration的规则 关于什么是“Performance Acceleration”请参阅matlab的帮助文件.1.只有使用以下数据类型,matlab才会 ...

  2. MATLAB调用C程序、调试和LDPC译码

    MATLAB是一个很好用的工具.利用MATLAB脚本进行科学计算也特别方便快捷.但是代码存在较多循环时,MATLAB运行速度极慢.如果不想放弃MATLAB中大量方便使用的库,又希望代码能迅速快捷的运行 ...

  3. 【算法随记六】一段Matlab版本的Total Variation(TV)去噪算法的C语言翻译。

    最近看到一篇文章讲IMAGE DECOMPOSITION,里面提到了将图像分为Texture layer和Structure layer,测试了很多方法,对于那些具有非常强烈纹理的图像,总觉得用TV去 ...

  4. 1个小时!从零制作一个! AI图片识别WEB应用!

    0 前言 近些年来,所谓的人工智能也就是AI. 在媒体的炒作下,变得神乎其神,但实际上,类似于图片识别的AI,其原理只不过是数学的应用. 线性代数,概率论,微积分(著名的反向传播算法). 大家觉得这些 ...

  5. Matlab匿名函数,向量化和预分配,函数的函数,P码文件

    匿名函数: 匿名函数是不存储在程序文件中.但与数据类型是 function_handle 的变量相关的函数.匿名函数可以接受输入并返回输出,就像标准函数一样.但是,它们可能只包含一个可执行语句. 例如 ...

  6. 如何加速MATLAB代码运行

    学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...

  7. Matlab 之 数据元素访问

    Matlab的含义是矩阵实验室,其特征之一就是数据的向量化操作,借此提升软件运行效率.那么,必然会涉及数据元素的访问.Matlab主要支持下面一些形式的访问: (1)array-inde: A(i) ...

  8. matlab直方图均衡,使用向量优化

    matlab自带有histeq函数对图像进行直方图均衡 自己写了一个,改成向量化形式,效率提高了一点,但是比自带的还是差很多,差不多9倍 function D = my_histeq(I) [m,n] ...

  9. 【转载】让你的MATLAB代码飞起来

    原文地址:http://developer.51cto.com/art/201104/255128_all.htm MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方 ...

随机推荐

  1. 超酷震撼 HTML5/CSS3动画应用及源码

    HTML5可以制作非常华丽的动画效果,这点通过之前的分享学习我们已经有深刻的了解了,今天我们主要来分享一些HTML5结合CSS3形成的超炫震撼的动画应用以及它们的源代码,真的非常不错. 1.纯CSS3 ...

  2. Java线程(七):Callable和Future

    转自:http://blog.csdn.net/ghsau/article/details/7451464 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. C ...

  3. 忠告初学者学习Linux系统的8点建议

    导读 新手或者说即将要入坑的小伙伴们,常常在QQ群或者在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的.例如:如何给添加的用户归属用户组,复制整个文件到另一个目录下面,磁盘合理划分,甚至 ...

  4. ubuntu ulimit 设置

    永久设置ubuntu ulimit 之前是ulimit -n 65535那样设置,不过貌似只是当前环境有效果,重启服务器的话,又失效了...今天无意找到一个设置的方法,可以永久设置ulimit的参数. ...

  5. Erlang中如何在同一台机器上运行多个erlang节点?

    首先打开shell,然后在打开cmd输入:erl -sname bilbo  这样就启动了一个gandal的erlang节点. 如图:

  6. 如何快速掌握一款新的MCU? (转)

      发布时间:2013-12-15 10:27:51 技术类别:单片机     个人分类:话题思考       任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量.指 ...

  7. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

  8. nginx 目录文件列表功能配置

    工作中常常有写不能有网页下载东西的需求,在Apache下搭建完成后直接导入文件即可达到下载/显示文件的效果,而Nginx也可以满足这样的需求(nginx 目录列表功能默认是关闭的),这时就需要配置. ...

  9. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  10. reds Virtual Memory

    Virtual Memory technical specification This document details the internals of the Redis Virtual Memo ...