Thursday 9 November 2017

Plot Moving Durchschnitt Python


Ich brauche Hilfe, die einen gleitenden Durchschnitt auf die Daten, die ich bereits in der Lage, zu plotten sind, brauche ich (siehe unten) Ich versuche, m (mein gleitender Durchschnitt) gleich der Länge von y (meine Daten) und dann innerhalb meiner for - Ich scheine, die rechte Mathe für meinen gleitenden Durchschnitt zu haben. Was funktioniert: Plotten x und y Was nicht funktioniert: plotting m oben auf x amp y und gibt mir diesen Fehler RuntimeWarning: ungültiger Wert in doublescalars Meine Theorie: Ich bin Einstellung m zu np. arrays y. shape und dann die Schaffung meiner für Schleife zu machen m gleich der Mathematik in der Schleife gesetzt, so ersetzen alle 0s an den gleitenden Durchschnitt Ich denke, dass lmjohns3 Antwort korrekt ist, aber Sie haben ein paar Probleme mit Ihrem gleitenden Durchschnitt Funktion. Zunächst einmal gibt es die Indizierung Problem der lmjohns3 darauf hingewiesen. Nehmen Sie die folgenden Daten zum Beispiel: Ihre Funktion ergibt die folgenden gleitenden Mittelwerte: Die Größe dieses Arrays (7) ist zu klein um eine Zahl. Der letzte Wert im gleitenden Durchschnitt sollte (789) 38 sein. Um zu beheben, dass Sie Ihre Funktion wie folgt ändern könnte: Das zweite Problem ist, dass, um zwei Datensätze zu zeichnen, die Gesamtzahl der Datenpunkte muss die gleiche sein. Ihre Funktion gibt einen neuen Datensatz zurück, der kleiner als der ursprüngliche Datensatz ist. (Sie haben vielleicht nicht bemerkt, weil Sie ein Nullen-Array der gleichen Größe zugewiesen haben.) Ihre For-Schleife wird immer ein Array mit einem Bündel von Nullen am Ende.) Die Faltungsfunktion gibt Ihnen die richtigen Daten, aber es hat zwei zusätzliche Werte ( Einige an jedem Ende) wegen des gleichen Arguments, das sicherstellt, dass das neue Datenarray die gleiche Größe wie das Original hat. Als alternative Methode können Sie Ihren Code mit Numpys Cumsum-Funktion vektorisieren. (Das letzte ist eine Änderung der Antwort in einem vorherigen Post.) Der Trick könnte sein, dass Sie die ersten Werte Ihres Datums Array fallen sollte. Verwenden Sie zum Beispiel den folgenden Plottenaufruf, wobei n die Anzahl der Punkte in Ihrem Durchschnitt ist: Das Problem hier lebt in Ihrer Berechnung des gleitenden Durchschnitts - Sie haben nur ein paar off-by-one Probleme in der Indizierung Hier haben Sie Alles in Ordnung mit Ausnahme der: 1. Dies sagt dem Interpreter, ein Slice zu starten, beginnend bei dem, was i-10 passiert, und endet kurz vor 1. Aber wenn i-10 größer als 1 ist, ergibt sich die leere Liste. Um es zu beheben, ersetzen Sie einfach 1 mit i. Zusätzlich muss Ihr Sortiment um eins am Ende erweitert werden. Ersetzen Sie y. shape0 durch y. shape01. Alternative Ich dachte nur, dass ich erwähne, dass Sie den gleitenden Durchschnitt automatisch berechnen können, indem Sie np. convolve (docs) verwenden: In diesem Fall hat m die gleiche Länge wie y. Aber die gleitenden Mittelwerte könnten am Anfang und am Ende seltsam aussehen. Dies liegt daran, dass dieselbe effektiv bewirkt, dass y mit Nullen an beiden Enden gepolstert wird, so dass es genügend y Werte gibt, die verwendet werden, wenn die Faltung berechnet wird. Wenn Sie es vorziehen, nur gleitende Durchschnittswerte zu erhalten, die mit Werten von y (und nicht von zusätzlicher Null-Auffüllung) berechnet werden, können Sie diese mit gültigen ersetzen. In diesem Fall ist m kürzer als y (genauer: len (m) len (y) - len (Filter) 1), die Sie in Ihrem Plot ansprechen können, indem Sie die ersten oder letzten Elemente von Ihr Datumsfeld. Ich spiele in Python ein bisschen wieder, und ich fand ein ordentliches Buch mit Beispielen. Eines der Beispiele ist die Auftragung einiger Daten. Ich habe eine. txt-Datei mit zwei Spalten und ich habe die Daten. Ich habe die Daten genau dargestellt, aber in der Übung heißt es: Ändern Sie Ihr Programm weiter, um den laufenden Durchschnitt der Daten zu berechnen und zu zeichnen, die durch Folgendes definiert sind: wobei r5 in diesem Fall (und yk die zweite Spalte in der Datendatei ist) . Lassen Sie das Programm sowohl die Originaldaten als auch den laufenden Durchschnitt auf demselben Graphen dar. Bisher habe ich dies: So wie berechne ich die Summe In Mathematica seine einfache, da seine symbolische Manipulation (Sumi, zum Beispiel), sondern wie man Summe in python, die alle zehn Punkte in den Daten und macht es, und dies tut Bis zum Ende der Punkte schaute ich das Buch an, fand aber nichts, was das erklären würde: heltonbikers code hat den Trick: D Vielen Dank :) Es gibt ein Problem mit der akzeptierten Antwort. Ich denke, wir müssen gültig anstelle der gleichen hier - return numpy. convolve (Intervall, Fenster, gleiche). Als Beispiel versuchen Sie die MA dieses Datensatzes 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - das Ergebnis Sollte 4.2.5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6,4,6,7.0,6.8 sein. Aber mit demselben gibt uns eine falsche Ausgabe von 2.6.3.0,4.2,5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6, 4.6.7.0,6.8,6.2,4.8 Rusty-Code, um dies auszuprobieren -: Versuchen Sie dies mit gültigen amp gleichen und sehen, ob die Mathematik sinnvoll ist. Ich habe versucht, dies aus, aber ich werde es untersuchen, es ist eine Weile seit I39ve codiert in Python. Ndash dingod Warum don39t Sie schnell ausprobieren dies mit dem rostigen Code (und die Beispiel-Datensatz (als einfache Liste), schrieb ich. Für einige faul Personen (wie ich auf den ersten) - seine Masken aus der Tatsache, dass gleitende Durchschnitt ist falsch. Wahrscheinlich sollten Sie erwägen, die Bearbeitung Ihrer ursprünglichen Antwort. Ich versuchte es nur gestern und doppelte Kontrolle rettete mir Gesicht von schauen schlecht bei der Berichterstattung auf Cxo Ebene. Sie müssen nur tun, ist zu versuchen Ihre gleiche gleitende Durchschnitt einmal mit quotvalidquot und andere Zeit mit quotsamequot - und sobald Sie überzeugt sind, geben Sie mir einige Liebe (aka-up-vote) ndash ekta Okt 29 14 bei 7:16

No comments:

Post a Comment