我有一些从 Matlab 移植到 R 的代码。我想比较它们的性能。
但是,我遇到了一个问题:system.time()
在 R 中使用,但是对于相同的代码,我得到了不同的结果。这应该发生吗?我如何比较它?
如果你也为自己安排 100 米冲刺,你会得到不同的结果!计算机发生了很多事情,这些事情会稍微改变运行代码所需的时间。
解决方案是多次运行代码。R 包benchmark
是您正在寻找的。
正如@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 次可以大大减少相对误差。