gpt4 book ai didi

performance - Replicate() 与 for 循环?

转载 作者:行者123 更新时间:2023-12-04 13:05:22 25 4
gpt4 key购买 nike

有谁知道replicate() 函数在R 中是如何工作的,以及它相对于使用for 循环的效率如何?

例如,...之间是否存在效率差异?

means <- replicate(100000, mean(rnorm(50)))

和...
means <- c()
for(i in 1:100000) {
means <- c(means, mean(rnorm(50)))
}

(我可能在上面输入了一些内容,但你明白了。)

最佳答案

您可以对代码进行基准测试并凭经验获得答案。请注意,我还添加了第二个 for 循环风格,它通过预分配向量来规避不断增长的向量问题。

repl_function = function(no_rep) means <- replicate(no_rep, mean(rnorm(50)))
for_loop = function(no_rep) {
means <- c()
for(i in 1:no_rep) {
means <- c(means, mean(rnorm(50)))
}
means
}
for_loop_prealloc = function(no_rep) {
means <- vector(mode = "numeric", length = no_rep)
for(i in 1:no_rep) {
means[i] <- mean(rnorm(50))
}
means
}

no_loops = 50e3
benchmark(repl_function(no_loops),
for_loop(no_loops),
for_loop_prealloc(no_loops),
replications = 3)

test replications elapsed relative user.self sys.self
2 for_loop(no_loops) 3 18.886 6.274 17.803 0.894
3 for_loop_prealloc(no_loops) 3 3.209 1.066 3.189 0.000
1 repl_function(no_loops) 3 3.010 1.000 2.997 0.000
user.child sys.child
2 0 0
3 0 0
1 0 0

看着 relative列,未预分配的 for 循环慢 6.2 倍。但是,预分配的 for 循环与 replicate 一样快.

关于performance - Replicate() 与 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412312/

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