带和不带输入参数的函数执行

时间:2016-10-21 19:42:23

标签: matlab performance

就像星期五的乐趣一样,我想知道哪一个更快,randrand(1)。所以我写了以下测试:

clc,clear,close all
N = 100;
T1 = zeros(1,N);
T2 = zeros(1,N);
for jj=1:N
tic;for ii=1:10000;rand;end;T1(jj)=toc;
tic;for ii=1:10000;rand(1);end;T2(jj)=toc;
end
plot(1:N,T1,'--o',1:N,T2,'--x');
hold on;plot(1:N,mean(T1)*ones(1,N));
hold on;plot(1:N,mean(T2)*ones(1,N));

你可以看到结果:

enter image description here

首先,我希望rand(1)更快,因为在另一种情况下rand,应该有一些代码检查输入参数的数量(nargin)并使用默认值没有争论。然后我认为必须有一个switch nargin,然后两种情况都会花费相同的时间。 因此,对我来说rand更快的原因并不合理。有什么想法吗?

扩展: 我通过添加更多数据进一步测试了一下:

enter image description here

我已为randrand(1,1)rand(1,2)rand(1,3)rand(1,100)绘制了测试结果。显然rand(1,100)应该花费更多时间来生成一百个随机数,但rand(1,1)rand(1,100)之间的时间差异几乎与rand和{{之间的时间差异相同1}}。

0 个答案:

没有答案