Numpy Gleitenden Durchschnitt Array




Numpy Gleitenden Durchschnitt ArrayHmmm, es scheint, diese quoteasy to implementquot Funktion ist eigentlich ziemlich einfach, falsch zu bekommen und hat eine gute Diskussion uber Speicher-Effizienz gefordert. I39m glucklich, 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 enthalt eine viel gr?ere Sammlung von domanenspezifischen 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 wurde zuerst in der Sammlung von SciPy Scikits suchen. Identifizieren die relevanten Scikit (s) und suchen die Funktion von Interesse dort. Scikits sind unabhangig 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 fur numerische Optimierung) hoch angesehen, reif Projekte lange vor der Wahl, um unter der relativ neuen Scikits Rubrik wohnen. Auf der Homepage der Scikits sind uber 30 solcher Scikits aufgelistet. Obwohl mindestens einige von ihnen nicht mehr unter aktiver Entwicklung sind. Nach diesem Rat wurden Sie zu scikits-timeseries fuhren, 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 konnen, 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 Fenstergro?e. Die in meinem Beispiel unten ist 10 Tage. Ob es funktioniert hat - z. Verglichen Werte 10-15 in der ursprunglichen Serie gegenuber der neuen Serie geglattet 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. ma. average Achse angewiesen sind, entlang derer der Durchschnitt berechnet wird. Der Standardwert ist, den Durchschnitt des abgeflachten Arrays zu berechnen. Gewichte. Arraylike, optional Die Bedeutung, die jedes Element bei der Berechnung des Mittelwerts hat. Die Gewichtsanordnung kann entweder 1-D (in diesem Fall ihre Lange die Gro?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. Wenn Gewichte komplex sind, werden die imaginaren Teile ignoriert. ist zuruckgekommen . Bool, optional Flag, das angibt, ob ein Tupel (Ergebnis, Summe der Gewichte) als Ausgabe (True) oder nur das Ergebnis (False) zuruckgegeben werden soll. Der Standardwert ist False. Durchschnittlich, sumofweights. (Tupel von) skalar oder MaskedArray Der Durchschnitt entlang der angegebenen Achse. Wenn die Ruckgabe True ist. Ein Tupel mit dem Durchschnitt als das erste Element und die Summe der Gewichte als zweites Element zuruck. Der Ruckgabetyp ist np. float64, wenn a ein Ganzzahl-Typ ist und kleiner als float64 ist. Oder der Eingabedatentyp, ansonsten. Wenn zuruckgegeben, ist sumofweights immer float64. In meinem letzten Satz versuchte ich, anzuzeigen, warum es Gleitkommafehler hilft. Wenn zwei Werte annahernd dieselbe Gro?enordnung sind, dann verliert das Addieren weniger Genauigkeit, als wenn Sie eine sehr gro?e Zahl zu einem sehr kleinen hinzugefugt 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 Prazision. Die Speicherauslastung fur die Mittelung von 64-Bit-Werten wurde 64 Elemente im Cache nicht uberschreiten, daher ist sie auch im Arbeitsspeicher freundlich. Ndash Mayur Patel UPD: effizientere Losungen wurden von Alleo und jasaarim vorgeschlagen. Sie konnen np. convolve dafur verwenden: Das Argument mode gibt an, wie die Kanten behandelt werden sollen. Ich wahlte den gultigen Modus hier, weil ich denke, das ist, wie die meisten Leute erwarten, laufen zu arbeiten, aber Sie konnen andere Prioritaten haben. Hier ist ein Diagramm, das den Unterschied zwischen den Modi veranschaulicht: Sie konnen einen laufenden Mittelwert mit berechnen: Glucklicherweise enthalt numpy eine Faltungsfunktion, die wir verwenden konnen, 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 mussen Sie die ersten N-1 Punkte entfernen: Auf meiner Maschine ist die schnelle Version 20-30 mal schneller, abhangig von der Lange des Eingabevektors und der Gro?e des Mittelungsfensters . Beachten Sie, dass Convolve enthalt einen gleichen Modus, der scheint, wie es die vorubergehende Frage ansprechen sollte, aber es teilt es zwischen Anfang und Ende. Es entfernt den Ubergang vom Ende, und der Anfang doesn39t haben eine. Nun, ich denke, es ist eine Frage der Prioritaten, 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) fur m in Modi zu zeigen Achse (-10, 251, -.1, 1.1) Legende (Modi, loc39Lower center39) (mit pyplot und numpy importiert). Ndash lapis Mar 24 14 am 13:56 pandas ist dafur besser geeignet als NumPy oder SciPy. Seine Funktion Rollingmean macht die Arbeit bequem. Es gibt auch ein NumPy-Array, wenn die Eingabe ein Array ist. Es ist schwierig, Rollingmean in der Leistung mit einer benutzerdefinierten reinen Python-Implementierung zu schlagen. Hier ist ein Beispiel Leistung gegen zwei der vorgeschlagenen Losungen: Es gibt auch schone Optionen, wie man mit den Randwerten umgehen. I39m immer durch eine Signalverarbeitungsfunktion geargert, die Ausgangssignale unterschiedlicher Form zuruckgeben als die Eingangssignale, wenn beide Eingange und Ausgange dieselbe Natur haben (z. B. beide Zeitsignale). Es bricht die Korrespondenz mit der zugehorigen unabhangigen Variablen (z. B. Zeit, Frequenz), die Plotten oder Vergleichen nicht direkt macht. Wenn Sie das Gefuhl teilen, konnen Sie die letzten Zeilen der vorgeschlagenen Funktion als ynp. convolve (w / w. sum (), s, mode39same39) zuruckgeben 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 fur das nachste Hakchen. Jeder Tick danach mussen Sie nur die neuesten gleitenden Mittelwert an Ihre rollende Array im Speicher anhangen. Mit dieser Methode konnen Sie nicht neu berechnen Dinge, die Sie bereits berechnet haben: Am ersten ticken Sie cumsum danach fugen Sie nur das quotmean der letzten Periode elementsquot, die 2x schneller fur alle nachfolgenden Zecken ist. Ndash litepresence 10. Juni um 12: 29numpy. average Achse, auf der durchschnittlich ein. Wenn Keine. Wird eine Mittelung uber das abgeflachte Array durchgefuhrt. Gewichte. Arraylike, optional Ein Array von Gewichten in Verbindung mit den Werten in einer. Jeder Wert in a tragt zum Durchschnitt nach seinem zugehorigen Gewicht bei. Die Gewichtsanordnung kann entweder 1-D (in diesem Fall ihre Lange die Gro?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 zuruckgekommen . Bool, optional Der Standardwert ist False. Wenn wahr . Wird das Tupel (durchschnittliche Summengewichte) zuruckgegeben, ansonsten wird nur der Durchschnitt zuruckgegeben. Wenn weightsNone. Die Summe der Gewichtungen entspricht der Anzahl der Elemente, uber die der Durchschnitt genommen wird. Durchschnittlich, sumofweights. Arraytype oder double Gibt den Durchschnitt entlang der angegebenen Achse zuruck. Wenn die Ruckgabe True ist. Ein Tupel mit dem Durchschnitt als das erste Element und die Summe der Gewichte als zweites Element zuruck. Der Ruckgabetyp ist Float, wenn a vom Integer-Typ ist, andernfalls ist er vom gleichen Typ wie a. Sumofweights ist von der gleichen Art wie Durchschnitt. Wir haben vorgestellt, wie man bewegliche 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 Lange 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 grune Diagramm, das bei 3 beginnt: Share this: So verwandte Post navigation Lassen Sie eine Antwort Antworten abbrechen Sehr nutzlich Ich mochte den letzten Teil auf gro?en Datensatzen lesen Hope wird es bald kommen8230 d Blogger wie folgt: