gpt4 book ai didi

r - 意外结果 : microbenchmark

转载 作者:行者123 更新时间:2023-12-03 01:24:52 27 4
gpt4 key购买 nike

我总是因为缺乏准确性而感到有点困扰,我看到基准标记为 system.timerbenchmark (因为可能缺乏计时的精确性)并看到哈德利引用了 microbenchmark最近包。所以我决定尝试一下,如下所示。我坑了mean反对f <- function(x) {sum(x)/length(x)}和预期meanf 做得更好但据我了解,结果并不表明这是真的。

  1. 我是否误解了结果?
  2. f 实际上比平均值更快吗?
  3. 微基准测试仍处于测试阶段吗?这需要解决出去?

我在 win 7 机器上运行 R2.15(因为微基准测试根据您的操作系统进行计时)。

结果

Unit: microseconds
expr min lq median uq max
1 f(x) 19.130 20.529 20.529 20.996 286.00
2 mean(x) 28.927 29.860 30.327 30.327 672.31

代码

library(microbenchmark)

x <- 1:10000
f <- function(x) {sum(x)/length(x)}
mean(x)

res <- microbenchmark(
mean(x),
f(x),
times=1000L)

print(res)
boxplot(res)

最佳答案

我可能是错的,但这对我来说似乎并不那么令人惊讶。在 mean.default 可以调用 .Internal(mean(x)) 之前,它必须检查 3 个 if 语句,计算 的长度x,然后检查另一个 if 语句。而且时间上的差异相当小。

直接调用 .Internal(mean(x) 仍然稍快一些:

library(microbenchmark)

x <- 1:10000
f1 <- function(x) {sum(x)/length(x)}
f2 <- function(x) {.Internal(mean(x))}

res <- microbenchmark(
mean(x),
f1(x),
f2(x),
times=1000L)

print(res)

Unit: microseconds
expr min lq median uq max
1 f1(x) 32.195 32.4605 32.8850 33.4645 106.997
2 f2(x) 21.840 22.0580 22.2015 22.6270 55.316
3 mean(x) 35.393 35.9840 36.1860 36.4420 91.203

关于r - 意外结果 : microbenchmark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com