Thursday, September 29, 2016

Gleitender Durchschnitt Numpy

Hmmm, es scheint, diese quoteasy to implementquot Funktion ist eigentlich ziemlich einfach, falsch zu bekommen und hat eine gute Diskussion über Speicher-Effizienz gefördert. I39m glücklich, aufblasen zu haben, wenn es bedeutet, dass etwas nach rechts gemacht worden ist. Ndash Richard NumPys Mangel an einer bestimmten Domain-spezifische Funktion ist vielleicht aufgrund der Core Teams Disziplin und Treue zu NumPys Prime-Direktive: bieten 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. Das (viel) grßere SciPy enthält eine viel grßere Sammlung von domänenspezifischen Bibliotheken (sogenannte Unterpakete von SciPy-Devs), beispielsweise numerische Optimierung (Optimierung), Signalverarbeitung (Signal) und Integralrechnung (integrieren). Meine Vermutung ist, dass die Funktion, die Sie nach ist in mindestens einem der SciPy-Unterpakete (scipy. signal vielleicht) aber ich würde zuerst in der Sammlung von SciPy Scikits suchen. Identifizieren die relevanten Scikit (s) und suchen die Funktion von Interesse dort. Scikits sind unabhängig voneinander entwickelte Pakete, die auf NumPy / SciPy basieren und auf eine bestimmte technische Disziplin gerichtet sind (z. B. scikits-image, scikits-learn etc.) Mehrere davon waren (insbesondere das geniale OpenOpt für numerische Optimierung) hoch angesehen, reif Projekte lange vor der Wahl, um unter der relativ neuen Scikits Rubrik wohnen. Auf der Homepage der Scikits sind über 30 solcher Scikits aufgelistet. Obwohl mindestens einige von ihnen nicht mehr unter aktiver Entwicklung sind. Nach diesem Rat würden Sie zu scikits-timeseries führen, aber das Paket ist nicht mehr unter aktiver Entwicklung In Wirklichkeit ist Pandas geworden, AFAIK, die de facto NumPy-basierte Zeitreihen-Bibliothek. Pandas hat mehrere Funktionen, die verwendet werden können, um einen gleitenden Durchschnitt zu berechnen, der einfachste ist wahrscheinlich rollingmean. Die Sie so verwenden: Nun, rufen Sie einfach die Funktion Rolling Mean Passing in der Serie Objekt und eine Fenstergröße. Die in meinem Beispiel unten ist 10 Tage. Ob es funktioniert hat - z. Verglichen Werte 10-15 in der ursprünglichen Serie gegenüber der neuen Serie geglättet mit rollenden Mittel Die Funktion Rolling Mean, zusammen mit etwa ein Dutzend oder so andere Funktion sind informell gruppiert in der Pandas-Dokumentation unter der Rubrik Moving-Fenster-Funktionen eine zweite, verwandte Gruppe von Funktionen In Pandas wird als exponentiell gewichtete Funktionen bezeichnet (zB ewma, die einen exponentiell verschobenen gewichteten Durchschnitt berechnet). Die Tatsache, dass diese zweite Gruppe nicht in den ersten (Moving-Window-Funktionen) enthalten ist, liegt vielleicht daran, dass die exponentiell gewichteten Transformationen nicht auf eine feste Windownumpy. Average-Achse angewiesen sind. Wenn Keine. Wird eine Mittelung über das abgeflachte Array durchgeführt. Gewichte. Arraylike, optional Ein Array von Gewichten in Verbindung mit den Werten in einer. Jeder Wert in a trägt zum Durchschnitt nach seinem zugehörigen Gewicht bei. Die Gewichtsanordnung kann entweder 1-D (in diesem Fall ihre Länge die Größe von a entlang der gegebenen Achse sein) oder von der gleichen Form wie a sein. Wenn weightsNone. Dann wird angenommen, daß alle Daten in a ein Gewicht gleich Eins haben. ist zurückgekommen . Bool, optional Der Standardwert ist False. Wenn wahr . Wird das Tupel (durchschnittliche Summengewichte) zurückgegeben, ansonsten wird nur der Durchschnitt zurückgegeben. Wenn weightsNone. Die Summe der Gewichtungen entspricht der Anzahl der Elemente, über die der Durchschnitt genommen wird. Durchschnittlich, sumofweights. Arraytype oder double Gibt den Durchschnitt entlang der angegebenen Achse zurück. Wenn die Rückgabe True ist. Ein Tupel mit dem Durchschnitt als das erste Element und die Summe der Gewichte als zweites Element zurück. Der Rückgabetyp ist Float, wenn a vom Integer-Typ ist, andernfalls ist er vom gleichen Typ wie a. Sumofweights ist von der gleichen Art wie Durchschnitt. In meinem letzten Satz versuchte ich, anzuzeigen, warum es Gleitkommafehler hilft. Wenn zwei Werte annähernd dieselbe Größenordnung sind, dann verliert das Addieren weniger Genauigkeit, als wenn Sie eine sehr große Zahl zu einem sehr kleinen hinzugefügt haben. Der Code kombiniert quadratweise benachbarte Quotwerte in einer Weise, daß gerade Zwischensummen immer in der Grße ausreichend nahe sein sollten, um den Gleitkommafehler zu minimieren. Nichts ist narrensicher, aber diese Methode hat ein paar sehr schlecht umgesetzte Projekte in der Produktion gespart. Ndash Mayur Patel Dez 15 14 am 17:22 Alleo: Statt einer Addition pro Wert, you39ll tun zwei. Der Beweis ist der gleiche wie das Bit-Flipping-Problem. Allerdings ist der Punkt dieser Antwort nicht notwendigerweise Leistung, sondern Präzision. Die Speicherauslastung für die Mittelung von 64-Bit-Werten würde 64 Elemente im Cache nicht überschreiten, daher ist sie auch im Arbeitsspeicher freundlich. Ndash Mayur Patel UPD: effizientere Lösungen wurden von Alleo und jasaarim vorgeschlagen. Sie können np. convolve dafür verwenden: Das Argument mode gibt an, wie die Kanten behandelt werden sollen. Ich wählte den gültigen Modus hier, weil ich denke, das ist, wie die meisten Leute erwarten, laufen zu arbeiten, aber Sie können andere Prioritäten haben. Hier ist ein Diagramm, das den Unterschied zwischen den Modi veranschaulicht: Sie können einen laufenden Mittelwert mit berechnen: Glücklicherweise enthält numpy eine Faltungsfunktion, die wir verwenden können, um die Dinge zu beschleunigen. Der laufende Mittelwert entspricht dem Falten von x mit einem Vektor, der N lang ist, wobei alle Elemente gleich 1 / N sind. Die numpy-Implementierung von convolve beinhaltet den Start-Transient, also müssen Sie die ersten N-1 Punkte entfernen: Auf meiner Maschine ist die schnelle Version 20-30 mal schneller, abhängig von der Länge des Eingabevektors und der Größe des Mittelungsfensters . Beachten Sie, dass Convolve enthält einen gleichen Modus, der scheint, wie es die vorübergehende Frage ansprechen sollte, aber es teilt es zwischen Anfang und Ende. Es entfernt den Übergang vom Ende, und der Anfang doesn39t haben eine. Nun, ich denke, es ist eine Frage der Prioritäten, ich don39t brauchen die gleiche Anzahl von Ergebnissen auf Kosten der eine Steigung in Richtung Null, die isn39t gibt es in den Daten. BTW, hier ist ein Befehl, um den Unterschied zwischen den Modi: Modi (39full39, 39same39, 39valid39) Diagramm (convolve (one ((200,)), diejenigen ((50,)) 4750, Modem) für m in Modi zu zeigen Achse (-10, 251, -.1, 1.1) Legende (Modi, loc39Lower center39) (mit pyplot und numpy importiert). Ich bin immer von Signalverarbeitung geärgert, die Ausgangssignale von anderer Form zurückgeben als die Eingangssignale, wenn beide Eingänge und Ausgänge von gleicher Natur sind (z. B. beide Zeitsignale). Es bricht die Korrespondenz mit der zugehörigen unabhängigen Variablen (z. B. Zeit, Frequenz), die Plotten oder Vergleichen nicht direkt macht. Wenn Sie das Gefühl teilen, können Sie die letzten Zeilen der vorgeschlagenen Funktion als ynp. convolve (w / w. sum (), s, mode39same39) zurückgeben ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly Lapis ja, aber lassen Sie uns sagen, Sie verwenden Cumsum-Methode auf die erste Tick und speichern Sie Ihre rollende durchschnittliche Array für das nächste Häkchen. Jeder Tick danach müssen Sie nur die neuesten gleitenden Mittelwert an Ihre rollende Array im Speicher anhängen. Mit dieser Methode können Sie nicht neu berechnen Dinge, die Sie bereits berechnet haben: Am ersten ticken Sie cumsum danach fügen Sie nur das quotmean der letzten Periode elementsquot, die 2x schneller für alle nachfolgenden Zecken ist. Ndash litepresence Jun 10 at 12: 29Ur ersten Schritt ist es, ein Diagramm, das die Mittelwerte von zwei Arrays. Let8217s erstellen zwei Arrays x und y und zeichnen sie. X wird 1 bis 10 sein. Und y haben die gleichen Elemente in einer zufälligen Reihenfolge. Dies wird uns helfen zu überprüfen, dass tatsächlich unser Durchschnitt korrekt ist. Let8217s berechnen die Ordnung unserer Elemente in y noch einmal und zeichnen sich wieder: In Bezug auf y sehen wir, wie sich der gleitende Durchschnitt verhält: Im nächsten Tutorial werden wir die gleitenden Mittelwerte darstellen. Share this: Gefällt mir: Verwandte Post navigation Lassen Sie eine Antwort Abbrechen Antwort d bloggers wie folgt: Wir haben vorgestellt, wie man gleitende Durchschnitte mit Python erstellen. Dieses Tutorial wird eine Fortsetzung dieses Themas sein. Ein gleitender Durchschnitt im Rahmen von Statistiken, auch Rolling / Run Average genannt, ist eine Art von endlicher Impulsantwort. In unserem vorangegangenen Tutorial haben wir die Werte der Arrays x und y: Let8217s plot x gegen den gleitenden Durchschnitt von y aufgetragen, den wir yMA nennen wollen: Erstens haben let8217s die Länge beider Arrays gleich: Und dies im Kontext: Das Ergebnis Diagramm: Um zu verstehen, dies, let8217s plot zwei verschiedene Beziehungen: x vs y und x vs MAy: Der gleitende Durchschnitt hier ist das grüne Diagramm, das bei 3 beginnt: Share this: So verwandte Post navigation Lassen Sie eine Antwort Antworten abbrechen Sehr nützlich Ich möchte den letzten Teil auf großen Datensätzen lesen Hope wird es bald kommen8230 d Blogger wie folgt:


No comments:

Post a Comment