savgol_filter#
- scipy.signal.savgol_filter(x, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode='interp', cval=0.0)[源代码][源代码]#
对数组应用Savitzky-Golay滤波器。
这是一个一维滤波器。如果 x 的维度大于1,axis 决定了滤波器沿哪个轴应用。
- 参数:
- xarray_like
要过滤的数据。如果 x 不是单精度或双精度浮点数组,它将在过滤前转换为
numpy.float64
类型。- window_length整数
滤波窗口的长度(即,系数的数量)。如果 mode 是 ‘interp’,window_length 必须小于或等于 x 的大小。
- polyorder整数
用于拟合样本的多项式阶数。polyorder 必须小于 window_length。
- derivint, 可选
要计算的导数的阶数。这必须是一个非负整数。默认值是0,这意味着不对数据进行微分而直接过滤。
- deltafloat, 可选
应用滤波器的样本间距。仅在 deriv > 0 时使用。默认值为 1.0。
- 轴int, 可选
数组 x 上要应用滤波器的轴。默认值为 -1。
- 模式str, 可选
必须是 ‘mirror’, ‘constant’, ‘nearest’, ‘wrap’ 或 ‘interp’。这决定了应用于填充信号的扩展类型。当 mode 为 ‘constant’ 时,填充值由 cval 给出。有关 ‘mirror’, ‘constant’, ‘wrap’ 和 ‘nearest’ 的更多详细信息,请参阅注释。当选择 ‘interp’ 模式时(默认),不使用扩展。相反,一个度数为 polyorder 的多项式拟合到边缘的最后 window_length 个值,并且该多项式用于评估最后 window_length // 2 个输出值。
- cval标量,可选
如果 mode 是 ‘constant’,则填充输入边缘之外的值。默认值为 0.0。
- 返回:
- y : ndarray, 与 x 形状相同ndarray,形状相同
过滤后的数据。
注释
关于 mode 选项的详细信息:
- mirror:
以相反顺序重复边缘的值。最接近边缘的值不包括在内。
- ‘nearest’:
该扩展包含最近的输入值。
- ‘常量’:
该扩展包含由 cval 参数给出的值。
- ‘wrap’:
该扩展包含数组另一端的值。
例如,如果输入是 [1, 2, 3, 4, 5, 6, 7, 8],并且 window_length 是 7,以下显示了不同 mode 选项的扩展数据(假设 cval 为 0):
mode | Ext | Input | Ext -----------+---------+------------------------+--------- 'mirror' | 4 3 2 | 1 2 3 4 5 6 7 8 | 7 6 5 'nearest' | 1 1 1 | 1 2 3 4 5 6 7 8 | 8 8 8 'constant' | 0 0 0 | 1 2 3 4 5 6 7 8 | 0 0 0 'wrap' | 6 7 8 | 1 2 3 4 5 6 7 8 | 1 2 3
Added in version 0.14.0.
示例
>>> import numpy as np >>> from scipy.signal import savgol_filter >>> np.set_printoptions(precision=2) # For compact display. >>> x = np.array([2, 2, 5, 2, 1, 0, 1, 4, 9])
使用窗口长度为5和2次多项式的滤波器。对所有其他参数使用默认值。
>>> savgol_filter(x, 5, 2) array([1.66, 3.17, 3.54, 2.86, 0.66, 0.17, 1. , 4. , 9. ])
请注意,x 中的最后五个值是抛物线的样本,因此当使用 mode=’interp’(默认值)和 polyorder=2 时,最后三个值保持不变。例如,与 mode=’nearest’ 进行比较:
>>> savgol_filter(x, 5, 2, mode='nearest') array([1.74, 3.03, 3.54, 2.86, 0.66, 0.17, 1. , 4.6 , 7.97])