【问题标题】:Computation time between two methods两种方法之间的计算时间
【发布时间】:2014-06-16 13:02:36
【问题描述】:

假设我们有两种方法或算法。假设每个代码如下:

方法一:

for i=0 to 100
 print i
 end for

方法二:

int x=0
 w = x/2
 print w

比较方法 1 和 2 的计算时间的最佳方法是什么? 我尝试使用 Matlab 代码:

t= cputime; 
 Method 1
 e = cputime-t

但我不确定这是否是比较这些方法性能的正确方法。

【问题讨论】:

    标签: algorithm matlab


    【解决方案1】:

    使用 timeit 函数,从 2013b 开始,它随 Matlab 一起提供,但如果您使用的是旧版本,它可以在 file exchange 上使用。这将在计时之前为您正确“预热”该函数,并在内部循环中退出您的函数,并为您报告多次运行的中位时间。

    否则,常规方法是在包含您的函数的循环周围使用tictoc

    【讨论】:

    • 请注意,对于非常短的计算时间,timeit 所需的函数调用开销可能会干扰您的观察。 (要查看这是否与您相关,您可以尝试在函数中运行所有内容 10 次并检查时间是否增加了 10 倍)如果开销是一个问题,您将需要在您的代码周围使用循环正在测试,你也可以切换到tic toc
    • @DennisJaheruddin timeit 明确计时并补偿函数调用开销。它可能不会完美地做到这一点,但它至少会像您通过切换到 tictoc 并补偿自己所做的那样做。事实上timeit 也补偿了调用tictoc 的开销。如果timeit 仍然认为你测量的东西太短,它会告诉你。
    • 澄清:根据文档,timeit 返回median 时间,而不是arithmetic mean(通常被认为是“平均值 i>")。
    【解决方案2】:

    请阅读this了解完整信息。

    n = 1e4; %Higher number results in more accurate comparison
    tic;
    for t=1:n
      {method1}
    end
    toc;
    
    tic;
    for t=1:n
      {method2}
    end
    toc;
    

    这会给你每次经过的时间。

    【讨论】:

    • 我试过这个 tic-toc ;但是每次我运行相同的脚本时它都会给出不同的值!我不认为它是一种稳健的方法!
    • 你是对的。有关这两个功能的更多详细信息here
    • @Omar14 请注意,您应该在脚本执行多次而不是一次的时间上运行 tic-toc。
    • @DennisJaheruddin 多次运行 tic-toc 和脚本是什么意思?!
    • 另外,要比较两种方法,您还必须运行包装这些方法的循环进行大量迭代以获得正确的经过时间。
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多