Die Breite des sich bewegenden Fensters muss eine ganze Zahl zwischen 1 und n sein, um verschiedene Algorithmen auszuwählen. C - eine Version wird in C geschrieben. Sie kann nicht-endliche Zahlen wie NaNs und Infs behandeln (wie Mittelwert (x, na. rm TRUE)) . Es funktioniert am schnellsten für endrulemean. Schnell - zweite, noch schnellere, C-Version. Dieser Algorithmus funktioniert nicht mit nicht-endlichen Zahlen. Es funktioniert auch die am schnellsten für endrule andere als Mittel. R - viel langsamer Code in R geschrieben. Nützlich für das Debuggen und als Dokumentation. Genau wie bei C. mit der Ausnahme, daß alle Additionen unter Verwendung eines Algorithmus durchgeführt werden, der eine zusätzliche Zeichenkette, die angibt, wie die Werte am Anfang und Ende der Daten behandelt werden sollen, verfolgt und korrigiert. Es werden nur die ersten und letzten k2-Werte an beiden Enden beeinflusst, wobei k2 die Halbbandbreite k2 k / 2. mean ist - wendet die zugrundeliegende Funktion auf kleinere und kleinere Abschnitte des Arrays an. Entspricht: für (i in 1: k2) outi Mittel (x1: (ik2)). Diese Option ist in C implementiert, wenn algC. Andernfalls wird in R. trim - trim die Endausgabe - Array - Länge gleich der Länge (x) - 2k2 (out out (k21): (n - k2)) durchgeführt. Diese Option imitiert die Ausgabe von apply (embed (x, k), 1, mean) und andere verwandte Funktionen. (En1: k2 x1: k2) Konstante - füllen Sie die Enden mit dem ersten und dem letzten berechneten Wert im Ausgabefeld aus (out1: k2 outk21) NA - füllen Sie die Enden mit NAs (out1: k2 NA ) Func - gleichbedeutend mit Mittelwert, aber impliziert in R. Diese Option kann sehr langsam sein und wird zumeist zum Testen mit einbezogen. Ähnlich wie Endrule in runmed-Funktion, die die folgenden Optionen hat: ldquo c (median, keep, constant) rdquo. specifies ob result Sollte zentriert (Standard), linksbündig oder rechtsbündig sein. Wenn endrule mean dann die Einstellung align nach links oder rechts wird auf die langsamere Umsetzung gleichbedeutend mit endrule func fallen. Abgesehen von den Endwerten ist das Ergebnis von y runmean (x, k) dasselbe wie ldquo für (j (1k2): (n - k2)) yjmean (x (j - k2): (jk2)) rdquo. Der Hauptanreiz, diesen Satz von Funktionen zu schreiben, war relative Langsamkeit der Mehrheit der beweglichen Fensterfunktionen, die in R und seinen Paketen verfügbar sind. Mit Ausnahme von Runmed. Eine laufende Fenster-Median-Funktion, sind alle Funktionen in siehe auch Abschnitt sind langsamer als sehr ineffizient ldquo gelten (embed (x, k), 1, FUN) rdquo Ansatz. Die Relativgeschwindigkeit der Runmean-Funktion ist O (n). Funktion EndRule wendet eine der fünf Methoden an (siehe Endrule-Argument), um Endpunkte des Eingangsarrays x zu verarbeiten. In der aktuellen Version des Codes wird die Default-Endruhe-Option im C-Code berechnet. Das geschieht, um die Geschwindigkeit bei großen bewegten Fenstern zu verbessern. Bei runmean (. Algexact) wird ein spezieller Algorithmus verwendet (siehe Referenzen), um sicherzustellen, dass keine Rundungsfehler auftreten. Daher ist runmean genauer als Filter (x, rep (1 / k, k)) und runmean (.algC) - Funktionen. Gibt einen numerischen Vektor oder eine Matrix mit der gleichen Größe wie x zurück. Nur im Fall von Endruxtrim sind die Ausgangsvektoren kürzer und die Ausgangsmatrizen haben weniger Zeilen. Die Funktion runmean (.algexact) basiert auf dem Code von Vadim Ogranovich, der auf dem Python-Code basiert (siehe letzte Referenz), auf den Gabor Grothendieck hingewiesen hat. Referenzen Über Round-Off-Fehlerkorrektur in runmean verwendet. Shewchuk, Jonathan Adaptive Präzisions-Gleitkomma-Arithmetik und schnelle, robuste geometrische Prädikate. Www-2.cs. cmu. edu/afs/cs/project/quake/public/papers/robust-arithmetic. ps Mehr über die Rundungsfehlerkorrektur finden Sie unter: aspn. activestate / ASPN / Kochbuch / Python / Rezept / 393090 Verknüpfungen zu: moving mean - mean. Kernapply. Filter. zersetzen. Stl. Rollmean aus Zoo-Bibliothek, subsums aus Magic-Bibliothek, Andere bewegliche Fenster-Funktionen aus diesem Paket: runmin. Runmax. Runquantile Runmad und rund runzed generische laufende Fenster-Funktionen: anwenden (embed (x, k), 1, FUN) (am schnellsten), läuft aus gtools Paket (extrem langsam für diesen Zweck), subsums aus Magic Library können laufende Fenster Operationen auf Daten mit Beliebige Abmessungen. Paket caTools Version 1.12 IndexI haben einen Vektor von Werten, die ich möchte den Durchschnitt in den Fenstern entlang einer kleineren Folie zu berichten. Zum Beispiel für einen Vektor der folgenden Werte: Eine Fenstergröße von 3 und eine Folie von 2 würde folgendermaßen ausführen: Und einen Vektor dieser Werte zurückgeben: Gibt es eine einfache Funktion, die dies für mich tun wird Wenn es auch die Indizes des Fensters beginnt, dass ein zusätzlicher Bonus wäre. In diesem Beispiel wäre das 1,3,5 mbq, die eine starke Annahme macht, dass die Beobachtung 0 ist. Ich hatte diesen Punkt gemildert und T-Burns macht die gleiche Annahme (eine nicht beobachtete 0). Ich würde es vorziehen, vielleicht mit NA Pad und passieren in der na. rm TRUE Argument zu bedeuten. Die Antwort sei nicht die gleiche wie die OP angefordert, aber es scheint sinnvoller. I39ll bearbeiten meine Antwort auf diese gehören. Ndash Gavin Simpson Ich kann dies leicht in Matlab und Ente, während Sie downvote mich: Als Nebenwirkung ist idx1 der Index des Elements in der Summe. Ich bin sicher, dass dies leicht in R übersetzt werden kann. Das Idiom zuerst: Überspringen: Letztes in Matlab gibt das Array zuerst, firstskip, first2skip. First n überspringen, wobei das letzte Element im Array nicht größer als das letzte ist. Bearbeiten. Ich hatte die Mittelung Teil (dividieren durch windowsize) weggelassen. Wasn39t mich auch nicht, aber wie von Ihnen selbst, Vor-Zuweisung der Ergebnis-Objekt wird mit der Geschwindigkeit Problem zu helfen. Ein Trick, wenn Sie don39t wissen, oder es ist langweilig / schwer zu bestimmen, die Größe der Ergebnis-Objekt, das Sie benötigen. Weisen Sie etwas vernünftig, vielleicht vor-Füllung mit NA. Dann füllen Sie mit Ihrer Schleife, aber fügen Sie einen Scheck, dass, wenn Sie nähern sich die Grenze des vorab zugeordnete Objekt, zuteilen, ein weiteres großes Stück, und füllen Sie weiter. Ndash Gavin Simpson Geschwindigkeit der Ergebnisse, während wichtig, isn39t die einzige Überlegung. Anstatt die Weile neu zu erfinden und alle Indizes usw. in den benutzerdefinierten Lösungen zu behandeln, ist die ein-lineare, die rollapply ist viel leichter zu verstehen und grep die Absicht von. Auch rollapply ist wahrscheinlich zu haben viele weitere Augäpfel Überprüfung seines Codes als etwas, was ich kochen könnte einen Nachmittag. Pferde für Kurse. Ndash Gavin Simpson Sep 25 10 um 9: 45Moving Averages in R Nach meinem besten Wissen hat R keine integrierte Funktion zur Berechnung der gleitenden Durchschnitte. Mit der Filterfunktion können wir jedoch eine kurze Funktion für gleitende Mittelwerte schreiben: Wir können die Funktion auf beliebigen Daten verwenden: mav (data) oder mav (data, 11), wenn wir eine andere Anzahl von Datenpunkten angeben wollen Als die Standard-5-Plotterarbeiten wie erwartet: plot (mav (data)). Zusätzlich zu der Anzahl der Datenpunkte, über die gemittelt wird, können wir auch das Seitenargument der Filterfunktionen ändern: sides2 verwendet beide Seiten, Seiten1 verwendet nur vergangene Werte. Teilen Sie diese:
Comments
Post a Comment