| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2081 人关注过本帖
标题:看看matlab内置函数的效率
只看楼主 加入收藏
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:11 
看看matlab内置函数的效率

一直都说向量化函数的效率很高,编程比较了一下,果然
求1到1000000整数的和,分别用for循环,while循环,和sum函数,运行显示如下:

ans =

using sum


s =

5.0000e+011


elapsed_time =

0.0470


ans =

using for


s =

5.0000e+011


elapsed_time =

1.1090


ans =

using while


s =

5.0000e+011


elapsed_time =

2.7500


化成整数的时间费用比就是1:24:58,呵呵,差得比较大啊

搜索更多相关主题的帖子: matlab 函数 效率 
2006-06-12 21:33
zhangenter
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:390
专家分:0
注 册:2006-6-5
收藏
得分:0 

tic;
i=1:1000000;
s=sum(i)
disp('use sum');toc

tic;s=0;
for i=1:1000000
s=s+i;
end
s
disp('use for');toc

tic;s=0;i=0;
while i<1000000
s=s+i;
i=i+1;
end
s
disp('use while');toc
结果

s =

5.0000e+011

use sum
Elapsed time is 0.046000 seconds.

s =

5.0000e+011

use for
Elapsed time is 0.016000 seconds.

s =

5.0000e+011

use while
Elapsed time is 0.0015000 seconds.
和楼主差别较大,后来我将程序段的顺序变了下,for最先执行,sum最后,变化比较大
s =

5.0000e+011

use for
Elapsed time is 1.969000 seconds.

s =

5.0000e+011

use while
Elapsed time is 2.438000 seconds.

s =

5.0000e+011

use sum
Elapsed time is 0.046000 seconds.
不过当三个程序段放到三个m文件里分别执行的时候,还是
use for
Elapsed time is 0.015000 seconds.
use while
Elapsed time is 0.016000 seconds.
use sum
Elapsed time is 0.047000 seconds.
不知道楼主的for和while用的什么程序段


OldHandle = findobj( \'Name\', \'悲伤\' ) ;if ~isempty(OldHandle),delete(OldHandle) ;end for Time = \'现在\':\'每一天\':\'永远\',set( gco, \'心情\', \'快乐\');end % 这段代码为你天天快乐而存在
2006-06-13 00:54
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 

和你的第一种处理方法一样,不过偶的版本是6.5
你应该是7.0吧


此人已消失
2006-06-13 12:19
zhangenter
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:390
专家分:0
注 册:2006-6-5
收藏
得分:0 

是的,版本不同居然还有这区别了


OldHandle = findobj( \'Name\', \'悲伤\' ) ;if ~isempty(OldHandle),delete(OldHandle) ;end for Time = \'现在\':\'每一天\':\'永远\',set( gco, \'心情\', \'快乐\');end % 这段代码为你天天快乐而存在
2006-06-13 13:22
Genial
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:175
专家分:0
注 册:2006-3-31
收藏
得分:0 
各段程序处理环境都不完全相同!
matlab的时间消耗很多时候在内存分配上,你每种情况处理前先用clear all清除了变量空间再试试。

2006-06-13 15:08
zhangenter
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:390
专家分:0
注 册:2006-6-5
收藏
得分:0 
以下是引用Genial在2006-6-13 15:08:26的发言:
各段程序处理环境都不完全相同!
matlab的时间消耗很多时候在内存分配上,你每种情况处理前先用clear all清除了变量空间再试试。

这点我也想到了. 放在三个程序段里分别执行的时候,我本来就用过clear的,贴子上的那个结果也是用了clear的,后来觉得是不是用了clear才和楼主时间差这么多,所以就删掉了.你试出来什么结果


OldHandle = findobj( \'Name\', \'悲伤\' ) ;if ~isempty(OldHandle),delete(OldHandle) ;end for Time = \'现在\':\'每一天\':\'永远\',set( gco, \'心情\', \'快乐\');end % 这段代码为你天天快乐而存在
2006-06-13 16:19
Genial
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:175
专家分:0
注 册:2006-3-31
收藏
得分:0 
没测过,matlab7对循环采用了java虚拟机进行加速,据说是。 另外多重for循环表现得比较明显。
2006-06-13 17:35
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 

按Genial说的是这样子的:

>> clear all
tic;s=0;
for i=1:1000000
s=s+i;
end
s
disp('use for');toc
clear all
tic;s=0;i=0;
while i<1000000
s=s+i;
i=i+1;
end
s
disp('use while');toc
clear all
tic;
i=1:1000000;
s=sum(i)
disp('use sum');toc

s =

5.0000e+011

use for

elapsed_time =

1.1870


s =

5.0000e+011

use while

elapsed_time =

3.0780


s =

5.0000e+011

use sum

elapsed_time =

0.0470

◣◣◣◣◣◣去掉代码中间的clear all的执行结果是◥◥◥◥◥◥

s =

5.0000e+011

use for

elapsed_time =

1.2030


s =

5.0000e+011

use while

elapsed_time =

3.0780


s =

5.0000e+011

use sum

elapsed_time =

0.0310

用sum还是比较快。一般书中推荐的优化matlab执行效率时,也包括了向量化执行的方法


此人已消失
2006-06-13 19:59
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
以下是引用zhangenter在2006-6-13 0:54:47的发言:

。。。。。。。。

不过当三个程序段放到三个m文件里分别执行的时候,还是
use for
Elapsed time is 0.015000 seconds.
use while
Elapsed time is 0.016000 seconds.
use sum
Elapsed time is 0.047000 seconds.
不知道楼主的for和while用的什么程序段

怎么会这样子呢?偶很想知道。。。


此人已消失
2006-06-13 20:04
zhangenter
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:390
专家分:0
注 册:2006-6-5
收藏
得分:0 

那你自己试一下哈,别放一起执行,分开执行看看


OldHandle = findobj( \'Name\', \'悲伤\' ) ;if ~isempty(OldHandle),delete(OldHandle) ;end for Time = \'现在\':\'每一天\':\'永远\',set( gco, \'心情\', \'快乐\');end % 这段代码为你天天快乐而存在
2006-06-13 20:43
快速回复:看看matlab内置函数的效率
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055504 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved