- 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?

InformationsquelleAutor Panto | 2017-03-02
Schreibe einen Kommentar