我正在使用 cputime 功能测量每次迭代的kmeans算法所采用的cputime。但是,一些迭代返回cputime = 0.这是我的实现:
load fisheriris;
[~,C] = kmeans(meas, 3, 'options',statset('MaxIter', 1),'Display', 'off');
results=[];
for i = 1:15
t=cputime;
[~,C] = kmeans(meas, 3, 'options',statset('MaxIter', 1),'Start',C, 'Display', 'off');
elapsedCPUTime=cputime-t;
results=[results;elapsedCPUTime];
end
这是我在15次迭代中得到的结果:0,0,0.046875,0,0,0,0,0,0.03125,0,0,0,0,0,0.03125。我的第一个想法是计算时间太快,因此0秒。这是真的吗?如果是这样,我们如何才能实现更精确的cputime?
非常感谢。
答案 0 :(得分:1)
要衡量效果,建议您使用timeit或 tic和toc功能。有关详细信息,请参阅Using tic and toc Versus the cputime Function。
关注该链接:
计算足够多的代码时间。理想情况下,您正在计时的代码应该运行超过1/10秒。
尝试在循环中运行kmeans
。
load fisheriris;
[~,C] = kmeans(meas, 3, 'options',statset('MaxIter', 1),'Display', 'off');
results=[];
for ii = 1:15
t=cputime;
for k = 1:100
[~,Ctemp] = kmeans(meas, 3, 'options',statset('MaxIter', 1),'Start',C, 'Display', 'off');
end
elapsedCPUTime=(cputime-t)/100;
C = Ctemp;
results=[results;elapsedCPUTime];
end
使用i
作为循环变量可能会产生unexpected results,这就是我将其更改为ii
的原因。