Mache die kumulative Summe schneller

8

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.

    
Arcinde 12.06.2015, 15:20
quelle

2 Antworten

4

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.

%Vor%     
Joshua Ulrich 12.06.2015, 20:05
quelle
5

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.

%Vor%

BEARBEITEN Beachten Sie, dass diese Methode langsamer ist als fun1 , wenn Sie die Zeit zum Aufteilen der Matrix in eine Liste angeben.

    
cdeterman 12.06.2015 16:22
quelle

Tags und Links