R vs. Matlab: eine Erklärung für den speed-Unterschied für rnorm, qnorm, und pnorm Funktionen
Ich verglich die Leistung der eingebauten R-Funktionen rnorm
, qnorm
und pnorm
die äquivalente Matlab-Funktionen.
Es scheint, als ob die rnorm
und pnorm
Funktionen sind 3-6 mal langsamer in R als auch in Matlab, in der Erwägung, dass die qnorm
- Funktion ca. 40% schneller in R. ich habe versucht, die Rcpp-Paket, um die Geschwindigkeit des R-Funktionen mit den entsprechenden C-Bibliotheken, die führte zu einem Rückgang in der Laufzeit von ~30%, was immer noch deutlich langsamer als Matlab für rnorm
und pnorm
.
Gibt es ein Paket erhältlich, das bietet eine schnellere Möglichkeit der Simulation von normalverteilten Zufallsvariablen in R (andere als mit der standard - rnorm
Funktion)?
- Sie haben wahrscheinlich dachte, dies schon, aber die andere Sache zu beachten ist, dass die Kommissionierung big block von Zufallszahlen ist viel schneller in R über die Auswahl von Ihnen ein-by-one ... also
rnorm(1e6)
ist viel schneller alsvapply(seq(1e6),function(i) rnorm(1),numeric(1))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu fördern, meinen Kommentar zu einer Antwort: ja, es ist.
library("sos"); findFn("Ziggurat")
findet die rziggurat Funktion in derSuppDists
Paket; es ist implementiert in C (oder C++?), und die Dokumentation sagtDer andere Punkt zu beachten, die können machen, wie viel oder mehr Unterschied in der Praxis ist, dass die Kommissionierung big block von Zufallszahlen ist viel schneller in R über die Auswahl von Ihnen ein-by-one ... also
rnorm(1e6)
ist viel schneller alsvapply(seq(1e6),function(i) rnorm(1),numeric(1))
Sehe ich zwei unterschiedliche Probleme, die man hier in jedem Absatz:
Ja, es gibt Unterschied zwischen Sprachen /Systeme wie z.B. R und Matlab. Teil davon hat zu tun mit der Dolmetscherin, die Geschwindigkeit der loops, die Geschwindigkeit der Funktion Anrufe etc pp. Rcpp können helfen, es mit Bezug zu Matlab, die einen echten JIT-compiler. Wir haben einen Vergleich zwischen Matlab, R und R+Rcpp für ein Kalman-filter in der jüngsten Papier auf RcppArmadillo.
Gibt es ein Unterschied in der zugrunde liegenden kompilierten code, und ja, R muss nicht immer der schnellere Umsetzung als R-Core (IMHO zu Recht) gilt für Präzisions-ersten. (Und Rcpp hilft nicht per se: Wir rufen was R ist intern.) Dies hatte z.B. mit dem Gibbs-Sampler Beispiel für eine MCMC, die Darren Wilkinson gestartet. Ich bemerkte, dass R
rgamma()
ist viel langsamer als bei anderen Systemen. Also um auf Ihre Frage bezüglich der N(0,1) zieht in einen schnelleren Weg: ich denke, wir brauchen eine trug Zikkurat Umsetzung. Das ist einer der schnelleren N(0,1) - Generatoren, die es gibt und ein paar andere Systeme benutzen.library("sos"); findFn("Ziggurat")
findet finzi.psych.upenn.edu/R/library/SuppDists/html/ziggurat.html , die sagt " Diese Umsetzung läuft in R ist etwa drei mal so schnell wie mit rnorm(). "