全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
1524 1
2014-06-13
       Matlab读取命令时是逐行读取的。所以虽然如下两个编程的结果相同,但是matlab读取命令的方式却是截然不同的:       >x=ones(10000,1);
       >x=x+x;
       和
       >x=ones(10000,1);
       >for i=1:10000
       >     x(i)=x(i)+x(i);
       >end
       对于第二种情况,matlab在循环过程中,每一次都需要读取第三行。结果,matlab一种读取了20002行的编程(第一行和第二行各一次,第三行和第四行各10000次)。整个程序的运行时间一方面取决于你的编程,另一方面也跟电脑的好坏有关。我的电脑读取一行大概需要5微秒。对于第一个程序,运行需要10微秒,对于第二个程序,大概需要10万微秒。这其中的差距还是相当大的。
       这也是为什么建议大家能够对数据进行向量化的时候尽可能的向量化。但是,如果你愿意用for循环的话也不是不可以。毕竟for循环看起来更容易理解。但是如果你有很多的for嵌套在一块,那程序运行的时间就会飞速的增长。
       如果能把matlab的循环语句处理好,其运行速度也不会比C语言差多少。
       可以测试一下自己电脑的运行速度:
       >x=ones(10000,1);
       >tic
       >x=x+x;
       >timeSpent=toc/10000
       其中 tic 和 toc 可以给出这两个命令之间的程序运算需要花费多少时间。在我的电脑上,计算一次加法大概需要1.5纳秒。计算x+x的时间就是1.5纳秒的10000倍。
       如果经常做这样的联系,你会发现如果所需要运行的程序较短,运行时间其实主要花费在读取命令的时间上。所以如果能够向量化,就尽量避免使用for循环。
原文作者:Jerome




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-6-14 16:17:10
呵呵,支持分享经验
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群