Gleitender Durchschnitt für NumPy-Array in Python

Manav Narula 30 Januar 2023
  1. Verwenden Sie die Methode numpy.convolve, um den gleitenden Durchschnitt für NumPy-Arrays zu berechnen
  2. Verwendung der Methode scipy.convolve zur Berechnung des gleitenden Mittelwerts für NumPy-Arrays
  3. Verwendung des Moduls bottleneck zur Berechnung des gleitenden Mittelwerts
  4. Verwendung von das Modul pandas zur Berechnung des gleitenden Mittelwerts
Gleitender Durchschnitt für NumPy-Array in Python

Der gleitende Durchschnitt wird häufig zur Untersuchung von Zeitreihendaten verwendet, indem der Mittelwert der Daten in bestimmten Intervallen berechnet wird. Es wird verwendet, um einige kurzfristige Schwankungen auszugleichen und Trends in den Daten zu untersuchen. Einfache gleitende Durchschnitte werden häufig verwendet, um Trends bei den Aktienkursen zu untersuchen.

Der gewichtete gleitende Durchschnitt legt mehr Wert auf die aktuellen Daten als auf die älteren Daten.

Die folgende Grafik gibt ein besseres Verständnis der gleitenden Durchschnitte.

Einfacher gleitender Durchschnitt

In diesem Tutorial wird erläutert, wie Sie den gleitenden Durchschnitt für NumPy-Arrays in Python implementieren.

Verwenden Sie die Methode numpy.convolve, um den gleitenden Durchschnitt für NumPy-Arrays zu berechnen

Die Funktion convolve() wird bei der Signalverarbeitung verwendet und kann die lineare Faltung zweier Arrays zurückgeben. Was bei jedem Schritt getan wird, ist, das innere Produkt zwischen dem Array von Einsen und dem aktuellen Fenster zu nehmen und ihre Summe zu nehmen.

Der folgende Code implementiert dies in einer benutzerdefinierten Funktion.

import numpy as np


def moving_average(x, w):
    return np.convolve(x, np.ones(w), "valid") / w


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

Ausgabe:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

Verwendung der Methode scipy.convolve zur Berechnung des gleitenden Mittelwerts für NumPy-Arrays

Auf die gleiche Weise können wir auch die Funktion scipy.convolve() verwenden. Es wird angenommen, dass es etwas schneller ist. Eine andere Möglichkeit, den gleitenden Durchschnitt mit dem NumPy-Modul zu berechnen, ist die Funktion cumsum(). Es berechnet die kumulative Summe des Arrays. Dies ist eine sehr einfache, nicht gewichtete Methode zur Berechnung des gleitenden Durchschnitts.

Der folgende Code gibt mit dieser Funktion den gleitenden Durchschnitt zurück.

def moving_average(a, n):
    ret = np.cumsum(a, dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1 :] / n


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

Ausgabe:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

Verwendung des Moduls bottleneck zur Berechnung des gleitenden Mittelwerts

Das Modul bottleneck ist eine Zusammenstellung von schnellen NumPy-Methoden. Dieses Modul verfügt über die Funktion move_mean(), die den gleitenden Durchschnitt einiger Daten zurückgeben kann.

Beispielsweise,

import bottleneck as bn
import numpy as np


def rollavg_bottlneck(a, n):
    return bn.move_mean(a, window=n, min_count=None)


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(rollavg_bottlneck(data, 4))

Ausgabe:

[  nan   nan   nan  8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

Da das Zeitfensterintervall 4 beträgt, gibt es zu Beginn drei Nanowerte, da der gleitende Durchschnitt für sie nicht berechnet werden konnte.

Verwendung von das Modul pandas zur Berechnung des gleitenden Mittelwerts

Zeitreihendaten werden meist mit einem pandas-DataFrame verknüpft. Daher ist die Bibliothek gut gerüstet, um verschiedene Berechnungen mit solchen Daten durchzuführen.

Wir können den gleitenden Durchschnitt von Zeitreihendaten mit den Funktionen rolling() und mean() berechnen, wie unten gezeigt.

import pandas as pd
import numpy as np

data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

d = pd.Series(data)

print(d.rolling(4).mean())

Ausgabe:

0       NaN
1       NaN
2       NaN
3      8.00
4      9.25
5     13.50
6     18.00
7     18.50
8     18.50
9     17.00
10    15.00
11    14.00
dtype: float64

Wir konvertieren zuerst das NumPy-Array in ein Zeitreihenobjekt und verwenden dann die Funktion rolling(), um die Berechnung im Rollfenster durchzuführen und den gleitenden Durchschnitt mit der Funktion mean() zu berechnen.

Auch hier, da das Zeitfensterintervall 4 beträgt, gibt es zu Beginn drei Nanowerte, da der gleitende Durchschnitt für sie nicht berechnet werden konnte.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Verwandter Artikel - Python NumPy