回答
使用多個內核/機器應該是簡單的,如果你僅僅使用平行獨立的重複,但要注意隨機數生成器的常見缺陷(例如,如果使用當前時間作爲種子,產卵許多過程一個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