Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Savitzky-Golay滤波器的Scipy实现_Python_Numpy_Scipy_Smoothing_Trend - Fatal编程技术网

Python Savitzky-Golay滤波器的Scipy实现

Python Savitzky-Golay滤波器的Scipy实现,python,numpy,scipy,smoothing,trend,Python,Numpy,Scipy,Smoothing,Trend,我在看: 我知道我们需要“填充”y,因为否则第一个窗口大小/2点将被排除,但我不认为从y[0]中减去特定值的绝对差有什么意义 我不认为绝对值应该存在,否则,如果趋势从增加开始,水平方向会反映出来,如果趋势从减少开始,垂直方向会反映出来 正如@ImportanceOfBeingErnest所指出的,这可能是代码中的一个输入错误,从我链接到的页面的左侧可以看出。事实上,这个逻辑是不对的,考虑到y[0]和y[-1]为0的情况,可以最好地看出这一点。我相信这是为了实现奇数反射,这样一阶导数在反射点上是连

我在看:

我知道我们需要“填充”
y
,因为否则第一个
窗口大小/2
点将被排除,但我不认为从
y[0]
中减去特定值的绝对差有什么意义

我不认为绝对值应该存在,否则,如果趋势从增加开始,水平方向会反映出来,如果趋势从减少开始,垂直方向会反映出来


正如@ImportanceOfBeingErnest所指出的,这可能是代码中的一个输入错误,从我链接到的页面的左侧可以看出。

事实上,这个逻辑是不对的,考虑到y[0]和y[-1]为0的情况,可以最好地看出这一点。我相信这是为了实现奇数反射,这样一阶导数在反射点上是连续的。正确的形式是

firstvals = 2*y[0] - y[1:half_window+1][::-1]
lastvals = 2*y[-1] - y[-half_window-1:-1][::-1]
或者,将反转和切片结合在一起

firstvals = 2*y[0] - y[half_window:0:-1]
lastvals = 2*y[-1] - y[-2:-half_window-2:-1]

我应该强调,这只是用户提供的一些代码。实际情况完全不同

我认为,在你看到矛盾的那一点上,你可以从把问题弄清楚中获益。这可能会阻止未来读者掉进同一个陷阱中。考虑一个简单的案例-勾画出一些数据点,然后勾勒出那些第一级和第二类看起来像是与原始数据点串联在一起。考虑到Savitzky Golay在中心点附近是对称的。现在,在y[0]和y[-1]处过滤数据的值是多少?另一个提示:这个问题实际上可能更容易被接受,因为本质上你不是问这里的编程,而是问哪个算法更适合信号平滑。仅供参考:Savitzky-Golay滤波器对一维信号的scipy实现是。(如果只需要过滤器的系数,可以使用。)
firstvals = 2*y[0] - y[1:half_window+1][::-1]
lastvals = 2*y[-1] - y[-half_window-1:-1][::-1]
firstvals = 2*y[0] - y[half_window:0:-1]
lastvals = 2*y[-1] - y[-2:-half_window-2:-1]