Python中的可变星数据平滑

Python中的可变星数据平滑,python,smoothing,Python,Smoothing,我目前正在处理可变星数据,我需要平滑时间序列数据。我有许多(成千上万)的数据点分布在一段时间内。为了使事情更简单,我将数据分为1001个时间单元,正是通过这个平均数据集,我试图画出一条平滑的曲线 我试过几种不同的方法,但没有一种效果很好。最有希望的两种方法是使用NumPy执行卷积,并使用SciPy的Savitzky-Golay滤波器。下面是一些代码: # Define a smoothing algorithm using the convolve function in NumPy. The

我目前正在处理可变星数据,我需要平滑时间序列数据。我有许多(成千上万)的数据点分布在一段时间内。为了使事情更简单,我将数据分为1001个时间单元,正是通过这个平均数据集,我试图画出一条平滑的曲线

我试过几种不同的方法,但没有一种效果很好。最有希望的两种方法是使用NumPy执行卷积,并使用SciPy的Savitzky-Golay滤波器。下面是一些代码:

# Define a smoothing algorithm using the convolve function in NumPy.  The function
# will use a window of 3 points surrouding each point.
window_len = 3
kernel = np.ones(window_len, dtype=float) / window_len
y_smooth = np.convolve(full_average_array, kernel, "same")
y_smooth2 = savgol_filter(full_average_array, 11, 2)

# Run the smoothing algorithm for 50 loops to better smooth annoying light curves.
for n in range(0, 50):
    y_smooth = np.convolve(y_smooth, kernel, "same")
    y_smooth2 = savgol_filter(y_smooth2, 5, 3)
正如我所说,两者都不完美。以下是一些放大的输出图片:

这显示了Savitzky-Golay滤波器的波纹度(蓝色)和卷积的平滑度(绿色),但Savitzky-Golay滤波器方法更接近φ=0附近的大倾角

这表明Savitzky-Golay滤波器方法比卷积方法更能表示最小值

每次我增加数值以使曲线更平滑时,曲线与观测数据的近似值就更差。我需要一条曲线,它既非常平滑,又非常接近数据,但我还没有找到一个好的方法来实现这一点。在这种情况下,我应该使用什么函数/方法