matlab for循环其实并不慢
2016-09-23 11:12
155 查看
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的一种解决方案!
欢迎大家留言讨论!
原因:因为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的一种解决方案!
欢迎大家留言讨论!
相关文章推荐
- 这是网友发的一道很常见的面试题, for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件) ,现在详细解析一下!
- Matlab之for循环语句
- parfor —— matlab 下的并行循环
- Matlab:用内建函数代替for循环
- Matlab中用一个For循环连续读入并显示几个图像文件 [转]
- Matlab的for循环优化
- Matlab的for循环优化
- 解决Matlab当中for循环运行慢的问题
- for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件)
- MATLAB 用for循环语句连续读入并处理一系列图片(图片名含数字和字符)
- MATLAB中对矩阵元素操作的for循环优化方法
- 这是网友发的一道很常见的面试题, for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件) ,现在详细解析一下!
- Matlab如何把for循环的结果以矩阵的形式显示
- MATLAB循环结构:for语句+定积分实例
- Matlab的if语句switch语句for循环while循环语句练习
- 这是网友发的一道很常见的面试题, for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件) ,现在详细解析一下!
- Matlab中用内建函数代替for循环
- matlab for循环的三种类型
- Matlab修改for循环次数
- c++ 和 Matlab 中 for 循环对比