matlab for循环其实并不慢

matlab for循环其实并不慢,首先matlab是一个解释执行性语言,变量不需要提前申明,这也就是导致很多人误认为matlab for循环很慢的。其实是错误的认识!

原因:因为matlab循环中变量没有预先声明,导致在循环中数组大小不断变化,当大小增长时,当前数组可能需要复制到新的更大的连续内存中,这显然会导致不必要的开销。如果数组长度较短,发生上述复制过程的次数少一些,而且发生时需要复制的内容也短,所以减速不太明显。如果很长会怎么样不难想象,同时也能想到如果预先声明足够大的数组则可以避免这一过程。


以上是参考了以下内容:

http://www.zhihu.com/question/33193085


自己测试的结果:

# cat tmp1.m

clear all; clc;

tic;
a = [];
for i = 1 : 200000
    a(i) = i + 1;
% a = [a i + 1];
end
toc;

运行tmp1.m,耗时 0.079107 seconds.


# cat tmp2.m

clear all; clc;

tic;
a = [];
for i = 1 : 200000
%     a(i) = i + 1;
    a = [a   i + 1];
end
toc;

运行tmp2.m,耗时 20.464098 seconds.


从以上对比可以看出,matlab for循环耗时,还是因为for循环内存要执行的语句耗时导致的!tmp2.m之所以耗时,是因为a矩阵需要向系统申请足够大的连续内存,会发生数据的复制操作,所以比较耗时!

最后,也可以看出,tmp1.m是tmp2.m的一种解决方案!


欢迎大家留言讨论!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值