回答
使用多个内核/机器应该是简单的,如果你仅仅使用平行独立的重复,但要注意随机数生成器的常见缺陷(例如,如果使用当前时间作为种子,产卵许多过程一个RNG每个可能会产生相关的随机数,从而导致无效的结果 - 例如见this paper)
您可能需要使用variance reduction到减少所需的复制,即数量缩小所需样本的大小。更多先进的方差减少技术可以在许多教科书中找到,例如,在this one。
拉丁超立方体采样很容易应用,对结果有很大影响。基本上,您可以从统一分布中获取拉丁超立方体样本(例如,在包中使用randomLHS()),并使用例如qnorm(uniformsample)将其转换为您所需的分布。
Preallocate your vectors!
> nsims <- 10000
> n <- 100
>
> system.time({
res <- NULL
for (i in 1:nsims) {
res <- c(res,mean(rnorm(n)))
}
})
user system elapsed
0.761 0.015 0.783
>
> system.time({
res <- rep(NA, nsims)
for (i in 1:nsims) {
res[i] <- mean(rnorm(n))
}
})
user system elapsed
0.485 0.001 0.488
>
我知道这个线程是真的老了,但如果有人绊倒,并正在寻找更快的方法,我认为以下工作:
library(data.table)
library(microbenchmark)
nsims <- 10000
n <- 100
# Answer from @Eduardo_Leoni:
preallocate<-function(nsims, n) {
res <- rep(NA, nsims)
for (i in 1:nsims) {
res[i] <- mean(rnorm(n))
}
return(res)
}
# Answer using data.table:
datatable<-function(nsims,n) {
dt <- data.table(i=1:nsims)[,list(res=mean(rnorm(1:n))),by=i]
return(dt)
}
# Timing benchmark:
microbenchmark(preallocate(nsims,n), datatable(nsims,n), times=100)
#Unit: milliseconds
# expr min lq median uq max neval
# preallocate(nsims, n) 428.4022 432.3249 434.2910 436.4806 489.2061 100
# datatable(nsims, n) 238.9006 242.3517 244.1229 246.5998 303.6133 100
你应该在同一台计算机上运行你的解决方案和其他人(因为一些计算机比其他计算机更快)。我发现你比'microbenchmark'的循环慢了一点;和'replicate(nsims,mean(rnorm(1:n)))'稍快一点。这在两种情况下都有3%的差异。 – Frank 2013-09-02 14:01:08
感谢您的建议,@Frank,并看到编辑的答案。在我的系统上,'data.table'使得@Eduardo_Leoni的循环解决方案的速度提高了〜1.8倍。请让我知道,如果我失去了一些东西,因为我绝对不是基准测试的细微差别的专家...... – dnlbrky 2013-09-07 12:43:57
非常有帮助。使用这个技巧,我将计算时间从250秒减少到了60秒。 – 2014-08-04 03:20:28
- 1. R的蒙特卡罗骰子模拟
- 2. 蒙地卡罗模拟器
- 3. 检索的卡方检验蒙特卡罗模拟值
- 4. 蒙特卡罗模拟,引导和回归中的R
- 5. 股票价格模拟R代码 - 慢 - 蒙特卡罗
- 6. 使用R做蒙特卡罗模拟,解决以下问题
- 7. Weld/CDI的最佳调试技巧是什么?
- 8. 什么是使用Eclipse PDT的最佳提示和技巧
- 9. 蒙特卡洛模拟中“最后的好回复”和“快速行动价值估计”的概念是什么?
- 10. 什么是“过度技巧”?
- 11. 什么是你最好的Swing设计模式和技巧?
- 12. Ruby中的蒙特卡洛模拟
- 13. 图形中的蒙特卡罗方法
- 14. 的Eclipse Ganymede黑客,提示,技巧,技巧和最佳实践
- 15. 蟒蛇,海龟,pi和蒙特卡罗
- 16. 通过使用蒙特卡罗法
- 17. 蒙特卡罗模拟(三角形分布)跨CSV成本数据
- 18. R蒙特卡罗模拟价格路径收敛波动问题
- 19. 什么是提高Asp.Net应用程序性能的最佳技巧?
- 20. C# - 什么是ADO.NET的一些高性能最佳实践/技巧
- 21. 快速构建Drupal模块的技巧?
- 22. 卡技巧程序
- 23. iOS快速加载图片的技巧
- 24. 什么是一些jSoup优化技巧?
- 25. 什么是Objective-c调试技巧?
- 26. 什么是你最喜欢的颠覆技巧和窍门
- 27. 为什么我的蒙特卡罗光线追踪如此嘈杂?
- 28. Android模拟器提示和技巧
- 29. 个人项目的最佳数据分析技巧/模型
- 30. 超快速刮屏技巧?
我在模型中使用这只是昨天它将我的运行时间缩短了15%以上。当然值得一行代码。 – 2009-09-11 15:23:53
这是一个伟大的小窍门 – Dan 2009-09-11 17:43:28