- 积分
- 15
- 注册时间
- 2006-6-23
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2008-2-18 02:31:54
|
显示全部楼层
来自 上海浦东新区
我的第一反应是用这一种方式:
[quato] find((a(2:99)>a(1:98) & a(2:99)>a(3:100))==1)+1; [quato]
没有想到过用这种:
[quato] find(diff(sign(diff(a)))<0)+1; [/quato]
而且,凭自个儿的感觉和经验,逻辑操作的方式应该比调用函数的方式更快一些,但在实际测试了一下,结果非常惊奇:第二种比第一种执行起来要快得多(1/2多一些),在 cpu T7250,内存1G,OS: xp sp2, Matlab 7.0 的hp笔记本上面跑几十次,结果都是第一种比第二种慢 e-5 的数量级,执行速度在1 * e-4左右.刚开始还有一些想不太明白.但最后想起了前一些时候,一个朋友分析M代码编译成的CPP代码时,似乎把很多操作都变成了调用函数来实现.连加减都是这样做的(没有确定过),逻辑操作自然也应该是. sign, diff都是built-in的函数,这里面即便有加减运算,应该不会是另外写一个函数来实现,少了这么多的调用,自然速度就更快.如果真的是这样的话,这也说明:要提高Matlab代码的运行速度,尽量多用 built-in 的函数,连> <都要少用了;P .
赶明儿写一个mex函数再试一下,再把这两种方式写的Matlab代码编译成cpp的代码再看一下,应该就清楚了 |
|