gpt4 book ai didi

r - 优化循环

转载 作者:行者123 更新时间:2023-11-30 09:24:11 25 4
gpt4 key购买 nike

我正在实现《统计学习的要素:数据挖掘、推理和预测》(Hashtle、Tibshirani、Friedman)一书中给出的示例。

我的目标是从两个二元正态分布生成 10+10 均值,然后使用前十个均值生成标记为“绿色”的点,使用其他十个均值生成标记为“红色”的点。每次必须随机选取必须生成点的二元高斯的平均值。我对 R 不太熟悉,所以我使用了 for 循环,随着 n 变大,使用它会花费大量时间。这是我的代码:

Sigma = diag(2)
greenMeans= mvrnorm(n=10, c(1,0), Sigma)
redMeans= mvrnorm(n=10, c(0,1), Sigma)

n=1000000
green<- array(dim=c(n,2))
red<- array(dim=c(n,2))

for (i in 1:n)
{
newGreen<- mvrnorm(n=1,greenMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
newRed<- mvrnorm(n=1,redMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
green[i,1] <- newGreen[1]
green[i,2] <- newGreen[2]
red[i,1] <- newRed[1]
red[i,2] <- newRed[2]
}

最佳答案

您可以完全跳过 for 循环并使用replicate,但不确定它会快多少:

do_stuff = function() {
newGreen<- mvrnorm(n=1,greenMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
newRed<- mvrnorm(n=1,redMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
return(list(newGreen, newRed))
}
replicate(10000, do_stuff)

关于r - 优化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797022/

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