Tuesday 7 November 2017

Plot Moving Average Python


Ich weiß, das ist eine alte Frage, aber hier ist eine Lösung, die keine zusätzlichen Datenstrukturen oder Bibliotheken verwendet. Es ist linear in der Anzahl der Elemente der Eingabeliste und ich kann nicht anders denken, um es effizienter zu machen, wenn ja Wer weiß von einem besseren Weg, um das Ergebnis zuzuordnen, lass es mich wissen. HINWEIS Dies wäre viel schneller mit einem numpy Array statt einer Liste, aber ich wollte alle Abhängigkeiten zu beseitigen Es wäre auch möglich, die Leistung durch Multi-Threaded zu verbessern Execution. Die Funktion geht davon aus, dass die Eingabediste eindimensional ist, also seien Sie vorsichtig. UPD effizientere Lösungen wurden von Alleo und jasaarim vorgeschlagen. Sie können für das verwenden. Das Modus-Argument gibt an, wie die Kanten behandeln Ich wählte den gültigen Modus hier Weil ich denke, dass s, wie die meisten Leute erwarten, dass das Laufen bedeutet, zu arbeiten, aber Sie können andere Prioritäten haben Hier ist eine Handlung, die den Unterschied zwischen den Modi veranschaulicht. Siehe Mar 24 14 am 22 01.Ich mag diese Lösung, weil es sauber ist eine Zeile Und r Elativ effiziente Arbeit in numpy getan Aber alleo s Effiziente Lösung mit besseren Komplexität Ulrich Stern Sep 25 15 bei 0 31.Sie können einen laufenden Mittelwert berechnen. Glücklicherweise enthält numpy eine Faltfunktion, die wir verwenden können, um die Dinge zu beschleunigen Ist gleichbedeutend mit dem Falten von x mit einem Vektor, der N lang ist, mit allen Mitgliedern gleich 1 N Die numpy Implementierung von convolve beinhaltet die Start-Transient, also musst du die ersten N-1 Punkte entfernen. Auf meiner Maschine ist die schnelle Version 20-30 mal schneller, abhängig von der Länge des Eingangsvektors und der Größe des Mittelungsfensters. Hinweis, dass die Faltung einen selben Modus enthält, der scheint, dass es das Anfangsübergangsproblem ansprechen sollte, aber es teilt es zwischen Anfang und Ende. Es entfernt die vorübergehende von dem Ende, und der Anfang doesn t haben eine Nun, ich denke, es ist eine Frage der Prioritäten, ich brauche nicht die gleiche Anzahl von Ergebnissen auf Kosten der Erhalten einer Steigung in Richtung Null, dass es nicht in den Daten BTW, Hier ist ein Befehl, um den Unterschied zwischen den Modi Modi voll, gleiche, gültige Plot-Konvolutionen 200,, die 50, 50, Modus m für m in Modi Achse -10, 251, - 1, 1 1 Legende-Modi, loc niedriger Mitte mit pyplot und numpy importierten Lapis Mar 24 14 bei 13 56.pandas ist besser geeignet für diese als NumPy oder SciPy seine Funktion rollingmean macht den Job bequem Es gibt auch ein NumPy-Array, wenn die Eingabe ein Array ist. Es ist schwer zu rollen In Leistung mit jeder benutzerdefinierten reinen Python-Implementierung Hier ist eine Beispiel-Performance gegen zwei der vorgeschlagenen Lösungen. Es gibt auch schöne Möglichkeiten, wie man mit den Kanten-Werte umzugehen. Ich bin immer durch Signalverarbeitung Funktion, die Ausgangssignale von unterschiedlicher Form zurückgeben Als die Eingangssignale, wenn sowohl Eingänge als auch Ausgänge von gleicher Art sind, z. B. beide zeitlichen Signale, die die Entsprechung mit der zugehörigen unabhängigen Variablen zerlegt, z. B. Zeit, Häufigkeit, Plotten oder Vergleich, keine direkte Sache, Wenn du das Gefühl hättest, möchtest du die letzten Zeilen der vorgeschlagenen Funktion ändern, als dieselbe Rückkehr y windowlen-1 - windowlen-1 Christian O Reilly 25. August 15 um 19 56. Ein bisschen spät zur Party, aber ich habe mein eigenes gemacht Kleine Funktion, die NICHT um die Enden oder Pads mit Nullen umwickelt, die dann verwendet werden, um den Durchschnitt auch zu finden. Als eine weitere Behandlung ist, dass es auch das Signal an linear beabstandeten Punkten wiederbearbeitet. Passen Sie den Code nach Belieben an, um andere Funktionen zu erhalten. Die Methode ist eine einfache Matrixmultiplikation mit einem normalisierten Gaußschen Kernel. Ein einfacher Gebrauch auf einem sinusförmigen Signal mit addiertem normalem verteiltem noise. This Frage ist jetzt sogar älter als wenn NeXuS schrieb über es letzter Monat, ABER ich mag, wie sein Code sich beschäftigt Randfälle Allerdings, weil es ein einfacher gleitender Durchschnitt ist, liegt es hinter den Daten, die sie anwenden, dachte ich, dass der Umgang mit Randfällen in einer befriedigenderen Weise als die NumPy-Modi, die gleich und voll sind, durch einen ähnlichen Ansatz erreicht werden könnten Zu einer Faltung bas Ed-Methode. Mein Beitrag verwendet einen zentralen laufenden Durchschnitt, um seine Ergebnisse mit ihren Daten auszurichten Wenn es zwei wenige Punkte für das vollformatige Fenster zur Verfügung stehen, werden laufende Mittelwerte aus sukzessiv kleineren Fenstern an den Kanten des Arrays berechnet. Von sukzessive größeren Fenstern, aber das ist eine Implementierung detail. It ist relativ langsam, weil es convolve verwendet und könnte wahrscheinlich ziemlich viel durch eine echte Pythonista aufgeholt werden, aber ich glaube, dass die Idee stands. answered Jan 2 bei 0 28. Ist schön aber langsam, wenn die Fensterbreite groß wird Einige Antworten bieten mehr effecient Algorithmen mit aber scheinen nicht in der Lage, Kantenwerte zu behandeln Ich selbst habe einen Algorithmus implementiert, der dieses Problem gut behandeln kann, wenn dieses Problem als Input-Parameter mergenum gedacht werden kann Als 2 windowwidth 1.Ich kenne diesen Code ist ein wenig unleserlich, wenn du es nützlich machst und irgendwelche Expanationen willst, lass es mich wissen und ich werde diese Antwort aktualisieren Da das Schreiben einer Erklärung kostet m Ich habe viel Zeit, ich hoffe ich tue es nur, wenn jemand es braucht Bitte vergib mir für meine Faulheit. Wenn du nur an seiner ursprünglichen Version interessiert bist. Es ist noch mehr unleserlich, dass die erste Lösung das Randproblem befreit, indem sie Nullen um die Array, aber die zweite Lösung, die hier gepostet wird, behandelt sie in einer harten und direkten Weise. In meinem letzten Satz versuchte ich zu zeigen, warum es hilft, floating Punktfehler Wenn zwei Werte ungefähr die gleiche Größenordnung sind, dann addiert sie verliert weniger Präzision als Wenn man eine sehr große Zahl zu einem sehr kleinen addiert hat Der Code kombiniert benachbarte Werte in einer Weise, dass auch Zwischensummen immer in der Größe ziemlich vernünftig sein sollten, um den Gleitkomma-Fehler zu minimieren. Nichts ist narrensicher, aber diese Methode hat ein Paar sehr gerettet Schlecht umgesetzte Projekte in der Produktion Mayur Patel Dez 15 14 bei 17 22. Alleo Anstatt einen zusätzlichen Wert pro Wert zu machen, wirst du zwei machen Der Beweis ist das gleiche wie das Bit-Flipping-Problem Allerdings ist der Punkt dieser Antwort Ist nicht unbedingt Leistung, aber Präzision Memory-Nutzung für die Mittelung von 64-Bit-Werte würde nicht mehr als 64 Elemente im Cache, so dass es auch in der Speicher-Nutzung als auch Maya Patel 29. Dezember 14 um 17 04. Ich spiele in Python ein bisschen wieder , Und ich fand ein ordentliches Buch mit Beispielen Eines der Beispiele ist, einige Daten zu zeichnen, die ich eine Akte mit zwei Spalten habe und ich habe die Daten, die ich die Daten gerade gezeichnet habe, aber in der Übung sagt es, ändern Sie Ihr Programm weiter zu berechnen und Zeichnen Sie den laufenden Durchschnitt der Daten, definiert durch. wo r 5 in diesem Fall und die yk ist die zweite Spalte in der Datendatei Haben Sie das Programm sowohl die ursprünglichen Daten und die laufenden Durchschnitt auf dem gleichen Diagramm. So weit ich habe dies. So, wie kann ich die Summe berechnen In Mathematica ist es einfach, da es s symbolische Manipulation Sum i, zum Beispiel, aber wie man Summe in Python berechnen, die alle zehn Punkte in die Daten nimmt und sie durchschnittt, und tut dies bis zum Ende von Punkte. Ich sah das Buch an, fand aber nichts, was das erklären würde Is. heltonbiker s code hat den trick gemacht D. Thank you very much. There ist ein Problem mit der akzeptierten Antwort Ich denke, wir müssen gültig anstelle von gleich hier verwenden - Rückkehr Fenster, same. As ein Beispiel ausprobieren die MA dieser Daten - set 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 sein , 5 0,5 0,5 2,5 4,4 4,5 4,5 6,5 6,4 6,7 0,6 8, aber mit einer unsachgemäßen 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 zu versuchen Dies out. Try dies mit gültigen gleich und sehen, ob die Mathematik macht sinnvoll. answered Okt 29 14 bei 4 27.Haven t versucht dies aus, aber ich werde in sie hinsehen, Es ist schon eine Weile her, seit ich in Python Dingod kodiert habe 29 14 at 7 07. dingod Warum hast du das schnell nicht mit dem rostigen Code und dem Beispieldatensatz als einfache Liste ausprobiert. Ich habe für irgendwelche faulen Leute wie ich schon einmal gewesen - seine Masken aus der Tatsache, dass das Bewegen Durchschnitt ist, sollten Sie in Erwägung ziehen, Ihre ursprüngliche Antwort zu bearbeiten. Ich habe es gerade gestern versucht und doppelte Kontrolle gespeichert Ich blicke von schauen schlecht auf Berichterstattung auf Cxo Ebene Alles, was Sie tun müssen, ist, versuchen Sie Ihre gleichen gleitenden Durchschnitt einmal mit gültigen und anderen Zeit mit dem gleichen - und sobald Sie überzeugt sind, geben Sie mir einige Liebe aka-up-vote ekta Okt 29 14 Um 7 16.Wir haben früher eingeführt, wie man gleitende Durchschnitte mit Python zu erstellen Dieses Tutorial wird eine Fortsetzung dieses Themas sein Ein gleitender Durchschnitt im Kontext der Statistik, auch als Rolling Run Average, ist eine Art von endlichen Impulsantwort. In unserem vorherigen Tutorial haben wir die Werte der Arrays x und y. Let s Plot x gegen den gleitenden Durchschnitt von y, die wir nennen yMA. Firstly, s s sättigen die Länge der beiden Arrays. And, um dies in context. Die resultierende Grafik Um zu verstehen, dies zu vermitteln, lassen Sie sich zwei verschiedene Beziehungen x vs y und x vs MAy. Die gleitende Durchschnitt hier ist die grüne Handlung, die beginnt bei 3.In der Fortsetzung dieses Tutorials, werden wir lernen, wie man berechnenden Durchschnitten auf groß Datensätze

No comments:

Post a Comment