R代码执行使用:系统时间()

时间:2012-04-06 19:11:16

标签: algorithm r matlab

我有一些代码,我从Matlab移植到R.我想比较它们的性能。

但是,我遇到了一个问题:在R中使用system.time(),但是对于相同的代码我得到的结果不同。这应该发生吗?我如何比较它?

2 个答案:

答案 0 :(得分:6)

如果你自己跑100米短跑的时间,你会得到不同的结果!计算机上有很多事情会稍微改变运行代码所需的时间。

解决方案是多次运行代码。 R包benchmark正是您正在寻找的。

答案 1 :(得分:0)

正如@Justin所说,时代总会有所不同。特别是第一次几次,因为垃圾收集系统没有根据您的具体用途进行调整。在测量之前重新启动R(并关闭其他程序,确保系统此时不扫描病毒等)可能是一个好主意... ...

请注意,如果测量的时间很短(几分之一秒),相对误差会相当大,所以请尝试调整问题,这样至少需要一秒钟。

benchmarkrbenchmark可以提供帮助。

...但我通常只围绕问题做一个for循环并调整它直到需要一秒左右 - 然后我也运行了几次。

以下是一个例子:

f <- function(x, y) {
    sum <- 1
    for (i in seq_along(x)) sum <- x[[i]] + y[[i]] * sum
    sum
}

n <- 10000
x <- 1:n + 0.5
y <- -1:-n + 0.5
system.time(f(x,y)) # 0.02-0.03 secs 

system.time(for(i in 1:100) f(x,y)) # 1.56-1.59 secs

...所以调用它100次会减少相对误差。