Thursday 11 May 2017

Numpy Convolve Exponentiell Gleitender Durchschnitt


Hmmm, es scheint, diese einfach zu implementieren Funktion ist eigentlich ziemlich einfach, falsch zu werden und hat eine gute Diskussion über Gedächtnis Effizienz gefördert Ich bin glücklich, aufblasen, wenn es bedeutet zu wissen, dass etwas richtig gemacht wurde Richard Sep 20 14 um 19 23.NumPy Der Mangel an einer bestimmten domänenspezifischen Funktion ist vielleicht auf die Disziplin des Core Teams zurückzuführen, und die Treue zu NumPy s Prime Directive bietet einen N-dimensionalen Array-Typ sowie Funktionen zum Erstellen und Indizieren dieser Arrays Wie viele grundlegende Ziele, diese Ist nicht klein, und NumPy macht es brillant. Die viel größere SciPy enthält eine viel größere Sammlung von Domain-spezifischen Bibliotheken namens Subpackages von SciPy Devs - zum Beispiel numerische Optimierung zu optimieren, Signal Processing Signal und integrale Kalkül integrieren. Meine Vermutung ist Dass die Funktion, die Sie nachher sind, in mindestens einem der SciPy-Unterpakete vielleicht aber ich würde zuerst in der Sammlung von SciPy Scikits identifizieren die relevanten scikit s und suchen nach Die Funktion von Interesse dort. Scikits sind unabhängig entwickelte Pakete auf der Grundlage von NumPy SciPy und gerichtet auf eine bestimmte technische Disziplin zB Scikits-Bild Scikits-Lernen usw. Mehrere von diesen waren vor allem die awesome OpenOpt für numerische Optimierung wurden hoch angesehen, reife Projekte lange Vor der Wahl zu wohnen unter der relativ neuen scikits rubric Die Scikits Homepage gern oben listet etwa 30 solcher Scikits, obwohl mindestens einige von denen sind nicht mehr unter aktiver Entwicklung. Nach diesem Rat würde Sie zu scikits-timeseries führen, aber das Paket ist nein Länger unter aktiver entwicklung In der Tat ist Pandas geworden, AFAIK, die de facto NumPy-basierte Zeitreihenbibliothek. Pandas hat mehrere Funktionen, die verwendet werden können, um einen gleitenden Durchschnitt zu berechnen, das einfachste von diesen ist wahrscheinlich rollingmean, die Sie wie so verwenden , Rufen Sie einfach die Funktion rollingmean passing in der Serie Objekt und eine Fenstergröße, die in meinem Beispiel unten ist 10 Tage. verifizieren, dass es w Orked - zB verglichene Werte 10 - 15 in der Originalreihe gegen die neue Serie geglättet mit rollenden Mittel. Die Funktion Rollingmean, zusammen mit etwa einem Dutzend oder so anderen Funktion sind informell gruppiert in der Pandas Dokumentation unter der Rubrik beweglichen Fenster Funktionen eine Sekunde , Verwandte Gruppe von Funktionen in Pandas wird als exponentiell gewichtete Funktionen bezeichnet, zB ewma, die exponentiell verschobenen gewichteten Durchschnitt berechnet. Die Tatsache, dass diese zweite Gruppe nicht in die ersten beweglichen Fensterfunktionen eingeschlossen ist, liegt vielleicht daran, dass die exponentiell gewichteten Transformationen nicht darauf ankommen Ein fester Länge Fenster. derwerted Jan 14 13 at 6 38.technische Indikatoren 0 0 16.Dieses Modul bietet einige technische Indikatoren für die Analyse von Aktien. Dieses Modul bietet einige technische Indikatoren für die Analyse von Aktien. Wenn ich kann, werde ich mehr hinzufügen. Wenn jemand wünscht Um mit neuen Code - oder Korrekturvorschlägen beizutragen, fühlen sich frei. Relative Strength Index RSI, ROC, MA Umschläge Einfache Moving Average SMA, Weighted Movi Ng Durchschnittliche WMA, Exponential Moving Average EMA Bollinger Bands BB, Bollinger Bandbreite, B. It erfordert numpy. This Modul wurde getan und getestet unter Windows mit Python 2 7 3 und numpy 1 6 1. 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 jemand weiß, dass es besser ist, das Ergebnis zuzuordnen , Bitte lass es mich wissen. HINWEIS Dies wäre viel schneller mit einem numpy Array anstelle einer Liste, aber ich wollte alle Abhängigkeiten zu beseitigen Es wäre auch möglich, die Leistung durch Multi-Thread-Ausführung zu verbessern. Die Funktion geht davon aus, dass die Eingabe-Liste ist Eindimensional, also seien Sie vorsichtig. Sie können ein laufendes Mittel mit berechnen. Zufällig, numpy schließt eine Faltenfunktion ein, die wir verwenden können, um die Dinge zu beschleunigen Das laufende Mittel ist gleichbedeutend mit dem Falten von x mit einem Vektor, der N lang ist, mit allen Mitgliedern gleich Bis 1 N Th Die numpy Implementierung von convolve beinhaltet den Start-Transienten, also musst du die ersten N-1 Punkte entfernen. Auf meiner Maschine ist die schnelle Version 20-30 mal schneller, je nach Länge des Eingangsvektors und der Größe des Mittelungsfensters. Note, dass convolve enthält einen gleichen Modus, der scheint, wie es sollte die Anfangsübergang Problem, aber es teilt es zwischen dem Anfang und Ende. Es entfernt die vorübergehende aus dem Ende, und der Anfang doesn t haben eine Nun, ich denke, es Eine Frage der Prioritäten, ich brauche nicht die gleiche Anzahl von Ergebnissen auf Kosten der Erlangung einer Steigung in Richtung Null, dass isn t dort in den Daten BTW, hier ist ein Befehl, um den Unterschied zwischen den Modi Modi voll, gleiche, gültige Handlung zu zeigen Konvillieren 200,, man 50, 50, mode m für m in modi-achse -10, 251, - 1, 1 1 legenden-modi, loc-untere 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 schwierig, Rollingmean in der Leistung mit jeder benutzerdefinierten reinen Python-Implementierung zu schlagen Hier ist eine Beispielleistung gegen zwei der vorgeschlagenen Lösungen. Es gibt auch schöne Möglichkeiten, wie man damit umgeht Die Kantenwerte. Ich bin immer durch Signalverarbeitungsfunktion verärgert, die Ausgangssignale unterschiedlicher Form als die Eingangssignale zurückgibt, wenn beide Ein - und Ausgänge gleich sind, zB zeitliche Signale, die die Entsprechung mit der zugehörigen unabhängigen Variablen z. B. Zeit, Frequenzerstellung unterbricht Plotten oder Vergleich nicht eine direkte Sache sowieso, wenn Sie das Gefühl teilen, möchten Sie vielleicht die letzten Zeilen der vorgeschlagenen Funktion als gleiche Rückkehr ändern y windowlen-1 - windowlen-1 Christian O Reilly Aug 25 15 bei 19 56. Ein bisschen Spät zur Party, aber ich habe meine eigene kleine Funktion, die nicht um die Enden oder Pads mit Nullen, die dann verwendet werden, um den Durchschnitt zu finden, als auch eine weitere Behandlung ist, dass es auch re - samples das Signal an linear beabstandeten Punkten Passen Sie den Code nach Belieben an, um andere Features zu erhalten. Die Methode ist eine einfache Matrixmultiplikation mit einem normalisierten Gaußschen Kernel. Ein einfacher Gebrauch auf einem sinusförmigen Signal mit addiertem normal verteiltem Rauschen. Diese Frage ist jetzt noch älter Als wenn NeXuS darüber geschrieben hat letzten Monat, aber ich mag, wie seine Code befasst sich mit Rand Fällen Allerdings, weil es ein einfacher gleitender Durchschnitt ist, es s Ergebnisse hinter den Daten, die sie gelten, dachte ich, dass Umgang mit Rand Fällen in einer befriedigenderen Weg als die NumPy-Modi, die gleich und voll sind, können durch die Anwendung eines ähnlichen Ansatzes für eine faltungsbasierte Methode erreicht werden. Mein Beitrag verwendet einen zentralen laufenden Durchschnitt, um seine Ergebnisse mit ihren Daten auszurichten Wenn es zwei wenige Punkte für das Vollformat-Fenster gibt Verwendet werden, laufende Mittelwerte werden aus sukzessiv kleineren Fenstern an den Kanten des Arrays berechnet. Eigentlich aus sukzessiv größeren Fenstern, aber das ist ein Implementierungsdetail. Es ist relativ langsam b Es ist wahr, dass die Idee steht, dass die Idee am 2. Januar bei 0 28 ankam. Es ist schön, aber langsam, wenn die Fensterbreite groß wird. Einige Antworten liefern mehr effiziente Algorithmen. Deutsch: www. tab. fzk. de/de/projekt/zusammenf...ng/ab117.htm. Englisch: www. tis-gdv. de/tis_e/containe/arten.../index. htm Es ist zwar schön, 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 deklariert wird. Mergenum kann als 2 windowwidth gedacht werden 1.Ich kenne diesen Code ist ein wenig unleserlich wenn du bist Finde es nützlich und will einige Ausbreitungen, lass es mich wissen und ich werde diese Antwort aktualisieren Da das Schreiben einer Erklärung mir viel Zeit kostet, hoffe ich, dass ich es nur tue, wenn jemand es braucht. Bitte vergib mir für meine Faulheit. Wenn du nur bist Interessiert an seiner ursprünglichen version. It s noch mehr unleserlich die erste Lösung befreit von Rand Problem durch padding Nullen um das Array, aber die zweite Lösung hier gehandhabt es in einer harten und direkten Weise. In meinem letzten Satz habe ich versucht zu zeigenWarum es hilft, floating point error Wenn zwei Werte ungefähr die gleiche Größenordnung sind, dann addiert man weniger Präzision, als wenn man eine sehr große Zahl zu einem sehr kleinen addiert. Der Code kombiniert benachbarte Werte in einer Weise, dass auch Zwischensummen immer sein sollten In der Größenordnung zu sein, um den Gleitkomma-Fehler zu minimieren Nichts ist Narr-Beweis, aber diese Methode hat ein paar sehr schlecht umgesetzte Projekte in der Produktion gespeichert Mayur Patel 15.12. Am 17 22. Alleo Anstatt einen zusätzlichen Wert pro Wert zu machen, wirst du sein Tut zwei Der Beweis ist das gleiche wie das Bit-Flipping-Problem Allerdings ist der Punkt dieser Antwort nicht unbedingt Leistung, aber Präzision Memory-Nutzung für die Mittelung 64-Bit-Werte würde nicht mehr als 64 Elemente im Cache, so ist es freundlich im Speicher Verwendung auch Mayur Patel 29 Dez 14 um 17 04.

No comments:

Post a Comment