Verrauschte Kurven optimal glätten
Betrachten Sie einen Datensatz, der durch Folgendes angenähert wird:
import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2
Dies beinhaltet 20 % Variation. Ansätze wie UnivariateSpline und gleitende Durchschnitte weisen Einschränkungen auf.
Savitzky-Golay-Filter
Eine effektive Lösung ist der Savitzky-Golay-Filter, der in Scipy verfügbar ist. Es verwendet die Regression der kleinsten Quadrate, um den Wert in der Mitte eines kleinen Fensters mithilfe eines Polynoms zu schätzen. Das Fenster verschiebt sich dann, um den Vorgang zu wiederholen, was zu einer optimierten Anpassung jedes Punkts führt.
import numpy as np import matplotlib.pyplot as plt from scipy.signal import savgol_filter x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2 yhat = savgol_filter(y, 51, 3) # window size 51, polynomial order 3 plt.plot(x,y) plt.plot(x,yhat, color='red') plt.show()
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3