Ich versuche kumulative Summen für jede Spalte einer Matrix zu nehmen. Hier ist mein Code in R:
%Vor%Ich habe Rcpp zum Vergleich verwendet:
%Vor% Also ist der C ++ Code 7,5 mal so schnell. Ist es möglich, besser als apply(testMatrix, 2, cumsum)
in reinem R zu machen? Es fühlt sich an, als hätte ich eine Größenordnung ohne jeden Grund.
Die Verwendung einer bytekompilierten for-Schleife ist etwas schneller als der Aufruf von apply
auf meinem System. Ich habe erwartet, dass es schneller ist, weil es weniger Arbeit macht als apply
. Wie erwartet, ist die R-Schleife immer noch langsamer als die einfache C ++ - Funktion, die Sie geschrieben haben.
Es ist schwierig, C ++ nur mit R-Code zu übertreffen. Der schnellste Weg, an den ich denken kann, ist, wenn Sie bereit sind, Ihre Matrix in eine Liste aufzuteilen. Auf diese Weise verwendet R primitive Funktionen und kopiert das Objekt nicht mit jeder Iteration ( apply
ist im Wesentlichen eine hübsche Schleife). Sie können sehen, dass C ++ immer noch gewinnt, aber es gibt eine deutliche Beschleunigung mit dem list
-Ansatz, wenn Sie wirklich nur R-Code verwenden möchten.
BEARBEITEN
Beachten Sie, dass diese Methode langsamer ist als fun1
, wenn Sie die Zeit zum Aufteilen der Matrix in eine Liste angeben.