我有一些代码,我从Matlab移植到R.我想比较它们的性能。
但是,我遇到了一个问题:在R中使用system.time()
,但是对于相同的代码我得到的结果不同。这应该发生吗?我如何比较它?
答案 0 :(得分:6)
如果你自己跑100米短跑的时间,你会得到不同的结果!计算机上有很多事情会稍微改变运行代码所需的时间。
解决方案是多次运行代码。 R包benchmark
正是您正在寻找的。 p>
答案 1 :(得分:0)
正如@Justin所说,时代总会有所不同。特别是第一次几次,因为垃圾收集系统没有根据您的具体用途进行调整。在测量之前重新启动R(并关闭其他程序,确保系统此时不扫描病毒等)可能是一个好主意... ...
请注意,如果测量的时间很短(几分之一秒),相对误差会相当大,所以请尝试调整问题,这样至少需要一秒钟。
包benchmark
或rbenchmark
可以提供帮助。
...但我通常只围绕问题做一个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次会减少相对误差。