关于变量清零后的耗时问题,谁能解释一下原因?
MATLAB 2008b下,tic
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
运行时间约为0.16 s
但当改为
tic
a = [];
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
运算时间为6秒
为什么在循环体外加一句a=[],耗时就这么严重?(profile viewer表明耗时全在循环体内部) 我用2007a
前者耗时1.199597秒
后者耗时1.198657秒
没有多大的差别
看来2008b确实有不同啊
是什么原因呢?是mupad的问题吗?
我也想知道 我用 7.0.1
测试了几次
第一个代码:Elapsed time is 2.003000 seconds.
第二个代码:Elapsed time is 2.003000 seconds.
:victory: 我用2007a
前者耗时1.199597秒
后者耗时1.198657秒
没有多大的差别
看来2008b确实有不同啊
是什么原因呢?是mupad的问题吗?
我也想知道
ljelly 发表于 2009-2-24 11:32 http://forum.simwe.com/images/common/back.gif
这应该不是2008b的问题,也应该与mupad无关,我用matlab2008a试了试tic
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 0.163418 seconds.
tic
a = [];
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 4.416226 seconds.
但是我把a=[]变为a=1时
tic
a = 1;
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
??? Warning: Struct field assignment overwrites a value with class "double".
See MATLAB 7.0.4 Release Notes, Assigning Nonstructure Variables As Structures Displays Warning for details.
Elapsed time is 4.568766 seconds
可以看出它是7.0.4后出现的问题,我用matlab7.0试了试
tic
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.516000 seconds.
>> tic
a = [];
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.531000 seconds.
>> tic
a = 1;
for m = 1:1000000
a.sinx = sin(m);
end;
toc;
Elapsed time is 2.516000 seconds.
这只能说明7.04之后对循环的加速功能更好了,
页:
[1]