savgol_filter 来自 scipy.signal 库,得到结果多项式函数?
savgol_filter from scipy.signal library, get the resulting polinormial function?
savgol_filter 给我系列。
我想得到底层多项式函数。
下图中红线的作用
这样我就可以推断出超出给定 x 范围的点。
或者我可以在两个极值数据点处找到函数的斜率。
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()
** 编辑**
由于过滤器使用最小二乘回归将小 window 中的数据拟合到给定次数的多项式,因此您可能只能从末端进行推断。我认为拟合曲线是这些 'fits' 的分段函数,每个函数都不能很好地代表整个数据。您可以做的是获取数据的末尾 windows,并将它们拟合到与 savizy golay 过滤器相同的多项式次数(使用 scipy 的 polyfit)。不过,它可能与 window 相差甚远。
您还可以使用scipy.signal.savgol_coeffs()
来获取滤波器的系数。我认为您将系数数组与数据数组进行点积以获得每个点的值。您可以包含导数参数以获得数据末尾的斜率。
savgol_filter 给我系列。
我想得到底层多项式函数。
下图中红线的作用
这样我就可以推断出超出给定 x 范围的点。
或者我可以在两个极值数据点处找到函数的斜率。
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()
** 编辑** 由于过滤器使用最小二乘回归将小 window 中的数据拟合到给定次数的多项式,因此您可能只能从末端进行推断。我认为拟合曲线是这些 'fits' 的分段函数,每个函数都不能很好地代表整个数据。您可以做的是获取数据的末尾 windows,并将它们拟合到与 savizy golay 过滤器相同的多项式次数(使用 scipy 的 polyfit)。不过,它可能与 window 相差甚远。
您还可以使用scipy.signal.savgol_coeffs()
来获取滤波器的系数。我认为您将系数数组与数据数组进行点积以获得每个点的值。您可以包含导数参数以获得数据末尾的斜率。