-1

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

非常感谢。

4

1 回答 1

1

文档中:

要测量性能,建议您使用 timeit 或 tic 和 toc 函数。有关更多信息,请参阅使用 tic 和 toc 与 cputime 函数

按照该链接:

为足够重要的代码部分计时。理想情况下,您正在计时的代码应该花费超过 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用作循环变量可能会产生意想不到的结果,这就是我将其更改为ii.

于 2016-12-20T08:51:18.543 回答