gpt4 book ai didi

r - 嵌套for循环的向量化

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

我有以下功能:

g.Bn = function(n) {
Bn = 0
for(k in 0:n) {
res.of.loop = 0
for(j in 0:k) {
res.of.loop = res.of.loop + (-1)^j * (j + 1)^n * choose(k, j)
}
Bn = res.of.loop * 1/(k+1) + Bn
}
return(Bn)
}

这里有没有一种方法可以对其进行矢量化而不是使用 for 循环?

最佳答案

您可以矢量化内部循环(根据@DaveT),并使用 sapply:

g.Bn2 = function(n) {
sum(sapply(0:n, function(k) {
sum((-1)^(0:k) * (0:k + 1)^n * choose(k, 0:k)) * 1/(k+1)
}))
}

或者另一种向量化外循环的可能性:

g.Bn3 = function(n) {
f <- function(k, n) sum((-1)^(0:k) * (0:k + 1)^n * choose(k, 0:k)) * 1/(k+1)
sum(Vectorize(f, vectorize.args = "k")(0:n, n))
}
> microbenchmark(g.Bn(100), g.Bn2(100), g.Bn3(100))
expr min lq mean median uq max neval
g.Bn(100) 1493.086 1533.9280 1841.3455 1585.354 1675.3575 9023.316 100
g.Bn2(100) 617.063 650.7850 905.6899 738.230 788.7305 9224.460 100
g.Bn3(100) 685.094 772.3785 1015.9182 816.945 860.1775 8213.777 100

关于r - 嵌套for循环的向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981526/

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