我目前正试图在R
中呈现与Python
中相同的结果,但我想我一定误解了Savitzky-Golay过滤器。我有以下Python
代码:
import numpy as np
from scipy.signal import savgol_filter
t = np.linspace(0,1,10)
X = np.vstack((np.sin(t),np.cos(t))).T
sfd = savgol_filter(X, window_length=5, polyorder=3, axis=0)
sfd
array([[-4.78900581e-07, 9.99997881e-01],
[ 1.10884544e-01, 9.93841986e-01],
[ 2.20394870e-01, 9.75397369e-01],
[ 3.27190431e-01, 9.44944627e-01],
[ 4.29950758e-01, 9.02837899e-01],
[ 5.27408510e-01, 8.49596486e-01],
[ 6.18361741e-01, 7.85877015e-01],
[ 7.01688728e-01, 7.12465336e-01],
[ 7.76378020e-01, 6.30281243e-01],
[ 8.41469460e-01, 5.40300758e-01]])
根据我的理解,这会使矩阵平滑,并为发展导数项做准备。但是,当在{pracma
时,我得到:
library(pracma)
t = seq(0, 1,length = 10)
X = t(rbind(sin(t), cos(t)))
savgol(X[, 1], fl = 5)
[1] 1.229175e-16 1.108826e-01 2.203977e-01 3.271947e-01 4.299564e-01 5.274154e-01 6.183698e-01 7.016979e-01 7.763719e-01 8.414710e-01
有人知道为什么这些数字如此不同,以及我如何从R
中的Python
产生相同的结果吗
提前谢谢
在信号包中使用sgolayfilt功能:
SciPy函数^{} 有几个用于处理输入数组末端的选项;请参阅docstring中的
mode
参数看起来R函数
savgol
的行为对应于SciPy的savgol_filter
中的mode='constant'
。除了第一个值(在两种情况下都是有效的0)之外,savgol_filter
的输出与R中的savgol
的输出匹配:相关问题 更多 >
编程相关推荐