就像星期五的乐趣一样,我想知道哪一个更快,rand
或rand(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));
你可以看到结果:
首先,我希望rand(1)
更快,因为在另一种情况下rand
,应该有一些代码检查输入参数的数量(nargin
)并使用默认值没有争论。然后我认为必须有一个switch nargin
,然后两种情况都会花费相同的时间。
因此,对我来说rand
更快的原因并不合理。有什么想法吗?
扩展: 我通过添加更多数据进一步测试了一下:
我已为rand
,rand(1,1)
,rand(1,2)
,rand(1,3)
和rand(1,100)
绘制了测试结果。显然rand(1,100)
应该花费更多时间来生成一百个随机数,但rand(1,1)
到rand(1,100)
之间的时间差异几乎与rand
和{{之间的时间差异相同1}}。