Was ist die schnellste Bibliothek / Algorithmus zur Berechnung des einfachen gleitenden Durchschnitts? Ich habe meine eigene geschrieben, aber es dauert zu lange auf 330 000 Elemente Dezimal-Datensatz.
Hier ist der Code meiner Methode:
%Vor% Das Data.Close[]
ist ein dezimales Array fester Größe (1 000 000).
Ihr Hauptproblem besteht darin, dass Sie für jede Iteration zu viele Informationen wegwerfen. Wenn Sie so schnell arbeiten möchten, müssen Sie einen Puffer der gleichen Größe wie die Rahmenlänge beibehalten.
Dieser Code wird gleitende Durchschnitte für den gesamten Datensatz ausführen:
(Nicht wirklich C #, aber Sie sollten die Idee bekommen)
%Vor%Bitte beachten Sie, dass es verlockend sein könnte, einen laufenden Cumsum zu behalten, statt den gesamten Puffer zu behalten und den Wert für jede Iteration zu berechnen, aber dies funktioniert nicht für sehr lange Datenlängen, da Ihre kumulative Summe so groß wird, dass sie klein wird zusätzliche Werte führen zu Rundungsfehlern.
Die aktuelle (akzeptierte) Lösung enthält eine innere Schleife. Es wäre effizienter, dies ebenfalls zu entfernen. Sie können sehen, wie dies hier erreicht wird:
Wie man eine sich bewegende Standardabweichung effizient berechnet
Heutzutage hat die Math DotNet -Bibliothek eine Klasse namens RunningStatistics
, die dies für Sie tun. Wenn Sie es nur über die letzten "X" -Elemente machen möchten, verwenden Sie MovingStatistics
stattdessen.
Beide berechnen laufende Durchschnittswerte, Varianz und Standardabweichung im laufenden Betrieb mit nur einem Durchlauf und ohne zusätzliche Kopien der Daten zu speichern.
Das ist MA, das ich in meiner App verwende.
%Vor%Sobald Sie es für die gesamte Datenreihe berechnet haben, können Sie sofort einen bestimmten Wert abrufen.
So habe ich es versucht. Aber ich warne mich davor, dass ich ein kompletter Amateur bin, also könnte das völlig falsch sein.
%Vor%Sollte eine Liste von Dezimalstellen mit den gleitenden Durchschnitten für Ihre Daten zurückgeben.
Tags und Links algorithm c# moving-average financial