[读书笔记]Matlab代码优化

Matlab是一种专门为数组运算设计的编程语言,只要可能,利用这

个优点可以加快计算的速度。本文将讨论两种优化方法:向量化循

环和预分配数组。
向量化循环:
生成一个一维函数:
直接借用其他编程语言思想。
M=100;
A=1;
for x=1:M
f(x)=A*sin((x-1)/(2*pi));
end
但是在向量化后,代码的效率会更高;充分利用Matlab索引功能,

上面的代码可以简化为
x=0:M-1;
f=A*sin(x/(2*pi));
当然,一维索引很简单。当被评估的函数有两个变量时,优化的索

引可能会复杂一些。Matlab使用函数meshgrid来实现二维函数的评

估,该函数的语法为
[C,R]=meshgrid(c,r)
函数将行向量c和r指定的域变换为数组C和R,这两个数组能够用来

评估有着两个变量的函数和三维表面图(在meshgrid的输入和输出重

,列总是首先列出)
输出数组C的行是c的副本,同样R和r的关系也是这样。
例如形成一个二维函数,该函数是有x和y的平方和。x=0,1,2和

y=0,1。r=[0,1,2],c=[0 1]
[C,R]=meshgrid(c,r);
C=
0 1
0 1
0 1
R=
0 0
1 1
2 2
h=R.^2+C.^2;
h=
0 1
1 2
4 5
这里需要注意,Matlab数组中不能有0索引。索引一般都从1开始。
从一幅已知图像中提取或处理一块区域。若要提取的区域为矩形且包括该矩形中的所有像素,则提取这种区域的程序的向量化非常简单,因而向量化经常用在此类操作中。要提取大小为m*n且其左上角坐标为(rx,cy)的区域s,可使用如下所示的基本向量化代码:
rowhigh=rx+m-1;
colhigh=cy+n-1;
s=f(rx:rowhigh,cy:colhigh);
预分配数组:
加快代码执行的时间的另外一种方法十载程序中预分配数组大小。在处理数值或逻辑数组时,预分配只是简单地创建有着适当维数的数组,数组的元素均为0。
预分配可以减少存储器的碎片。动态存储器的分配和去分配会使得存储器出现碎片。实际的结果是在计算过程中可能会有足够空间的可用物理存储器,但可能没有足够的连续空间来容纳一个较大的变量。预分配通过在计算开始就允许Matlab为大数据构造保留足够的存储空间,来阻止无连续空间出现的情况。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值