Nested Loop für Bootstrapping verschnellern
Verfasst: Do Mai 18, 2017 6:24 pm
Hallo!
Ich bin ziemlich verzweifelt, da ich eine große Rechenoperation durchführen möchte. Bisher habe ich das so gelöst, dass ich einen verschachtelten for-Loop erstellt habe, jedoch scheint das viel zu langsam zu sein. Ich habe jetzt viel gelesen und bemerkt, dass das Problem bekannt ist. Auch wird immer mal gesage, dass "Vektorisierung" die beste Lösung sei - ich weiß jedoch nicht, wie das umzusetzen ist.
Hier ein Beispielcode (der keinen Sinn macht, weil immer das gleiche Ergebnis in die Matrix geschrieben wird):
Was ich gerne machen würde ist, die Ergebnisse des Bootstrappens in eine Matrix zu schreiben. Bei mir ist jedoch die Zahl der Bootstrap Samples bei 10.000 und die matrix viel größer (2295 Zellen). Mit dem beschriebenen Code ist es nicht machbar die ganze Rechenoperation zu beenden..
Ganz herzlichen Dank im Voraus!
Ich bin ziemlich verzweifelt, da ich eine große Rechenoperation durchführen möchte. Bisher habe ich das so gelöst, dass ich einen verschachtelten for-Loop erstellt habe, jedoch scheint das viel zu langsam zu sein. Ich habe jetzt viel gelesen und bemerkt, dass das Problem bekannt ist. Auch wird immer mal gesage, dass "Vektorisierung" die beste Lösung sei - ich weiß jedoch nicht, wie das umzusetzen ist.
Hier ein Beispielcode (der keinen Sinn macht, weil immer das gleiche Ergebnis in die Matrix geschrieben wird):
Code: Alles auswählen
# Bootstrap Funktion
# Mittelwert bootstrappen
bt.fun <- function(x, d){
dat <- x[d]
mean(dat)
}
# Matrix in der die Ergebnisse gespeichert werden
m <- matrix(rep(0,5*5), ncol = 5)
# Zeitmessung
before = Sys.time()
# verschachtelter For-Loop
for(i in 1:5){
for(j in 1:5){
set.seed(1)
# 100 Bootstrap-Samples, Parallel-Computing wird benutzt mit 4 Kernen
b <- boot::boot(mtcars$mpg, bt.fun, R = 100, parallel = "snow", ncpus = 4)
m[i,j] <- b$t0
}
}
# Zeitmessung2
time1 = Sys.time() - before
Ganz herzlichen Dank im Voraus!