- Funktion zum Einfachen Gleitenden Durchschnitt (SMA)
Habe ich die folgende Funktion für die Berechnung der SMA in python:
import numpy as np
def calcSma(data, smaPeriod):
sma = []
count = 0
for i in xrange(data.size):
if data[i] is None:
sma.append(None)
else:
count += 1
if count < smaPeriod:
sma.append(None)
else:
sma.append(np.mean(data[i-smaPeriod+1:i+1]))
return np.array(sma)
Diese Funktion funktioniert, aber ich finde, dass es sehr wenig pythonic. Ich weiß nicht, wie die Indizierung und zählen ich bin dabei, noch die Art, wie ich anfügen an die Liste und dann schalten Sie es in einen numpy-array, bevor ich es zurückgeben.
Dem Grund habe ich den Umgang mit all diese Keiner, ist weil ich möchte ein array zurückgeben, in der gleichen Größe wie der Eingabe-array. Dies macht es einfacher, um Handlung und beschäftigen sich mit auf einer Allgemeinen Ebene höher. Das kann ich leicht tun Sachen wie diese:
sma = calcSma(data=data, smaPeriod=20)
sma2 = calcSma(data=sma, smaPeriod=10)
plt.plot(data)
plt.plot(sma)
plt.plot(sma2)
plt.show()
So, irgendwelche Ideen auf, wie dies geschehen kann, schöner und mehr pythonic?
- Mögliche Duplikate von Gleitender Durchschnitt oder laufen bedeuten
- Das macht Ihren code crash:
calcSma(np.array([1, 1, 1, 1, 1, 1, None, 1, 1, 1]), 3)
, kannst du das bestätigen? - Ja, es wird Abstürzen, aber seit dem Keine Elemente immer in den start ein array, das ist nicht wirklich ein problem.
- Hier ist meine Lösung nur mit standard-Python-Bibliothek: Gleitender Durchschnitt oder laufen bedeuten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pythonic genug, ich hoffe
Hier ist eine weitere Implementierung des gleitenden Durchschnitts nur mit standard-Python-Bibliothek: