2

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

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

4

2 回答 2

6

如果你也为自己安排 100 米冲刺,你会得到不同的结果!计算机发生了很多事情,这些事情会稍微改变运行代码所需的时间。

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

于 2012-04-06T19:15:23.833 回答
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 次可以大大减少相对误差。

于 2012-04-06T20:20:17.470 回答