带kmeans的matlab cputime返回0

时间:2016-12-20 04:39:56

标签: matlab k-means cpu-time

我正在使用 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?

非常感谢。

1 个答案:

答案 0 :(得分:1)

来自documentation

  

要衡量效果,建议您使用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的原因。