1 问题描述

        在matlab中,如果在每次循环中增加一个数组元素,直接对数组进行赋值时,如果没有预先分配好内存,那么matlab在每次运行到此处时,都会重新向系统申请一次内存,从而导致程序运行速度变得很慢。

2 解决方法

        预先分配数组内存,可以适当地划分大一点的内存以保证满足数组的长度要求。

3 案例说明

        首先需要明确,matlab可以实用tic和toc计算程序之间所耗费的时间。

(1) 没有预先分配内存时

tic

for i = 1:10000000

a(i) = i;

end

toc

        得到的结果如下:

 (2) 分配内存时

tic

a = zeros(1, 10000000);

for i = 1:10000000

a(i) = i;

end

toc

        得到的结果如下:

        计算二者之间的差距:

 

        可以看到,速度相差了19倍,这对于大型的代码工程而言无疑是致命的。因此,在编写程序时,应该多学习如何预先分配内存。

4 拓展说明

        如果连续两次输入没有预先分配内存的程序,可以明显发现第二次所耗费的时间非常少。举例如下:

tic

for i = 1:10000000

a(i) = i;

end

toc

tic

for i = 1:10000000

a(i) = i;

end

toc

        得到的结果分别为:

        这是因为Matlab已经在执行第一次命令时生成了a这个变量,并将其存放在内存,这样第二次执行命令时,a变量已经存在,并且其长度足够,因此matlab不再需要申请内存,节省了时间。

        但是这样做会存在弊端,假如第一次的变量a长度为10,而第二次的长度为9,那么第10个数据对于第二次来说就是无用的脏数据,会对后面的数据产生不利的影响。因此,建议对于重复的变量名,先进行

clear a

 清除变量后,再预分配内存,这样就能避免上述问题。

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。