【python】scipy.signal.savgol_filter()
SG滤波法(Savitzky Golay Filter)最初由Savitzky和Golay于1964年提出。广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。其核心思想也是对窗口内的数据进行加权滤波,但是它的加权权重是对给定的高阶多项式进行最小二乘拟合得到。它的优点在于,在滤波平滑的同时,可以确保信号的形状、宽度不,能够更有效地保留信号的变化信息,对于数据的观测信息
·
目录
作用
对数组应用Savitzky-Golay过滤器。
SG滤波法(Savitzky Golay Filter)最初由Savitzky和Golay于1964年提出。广泛地运用于数据流平滑除噪,是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。其核心思想也是对窗口内的数据进行加权滤波,但是它的加权权重是对给定的高阶多项式进行最小二乘拟合得到。它的优点在于,在滤波平滑的同时,可以确保信号的形状、宽度不,能够更有效地保留信号的变化信息,对于数据的观测信息保持的更好,在一些注重数据变化的场合会比较适用。
这是一个一维滤波器。如果x的维度大于1,则axis确定应用过滤器的轴。
参数设置
scipy.signal.savgol_filter(x, window_length, polyorder, deriv=0, delta=1.0, axis=-1, mode='interp', cval=0.0)
- x (array_like):要过滤的数据。If x is not a single or double precision floating point array, it will be converted to type before filtering.
numpy.float64
- window_length (int):滤波器窗口的长度(即系数的数量)。如果mode是' interp ', window_length必须小于或等于x的大小。
- polyorder(int):用于拟合样本的多项式的阶数。Polyorder必须小于window_length。
- deriv(int,可选):要计算的导数的阶数。这必须是一个非负整数。默认值为0,表示过滤数据时不做区分。
- delta(float,可选):将应用滤波器的样本的间距。仅当deriv >为0时使用。默认值是1.0。
- axis(int,可选):滤波器应用的阵列x轴。默认值是-1。
- mode(str,可选):必须是` mirror `、` constant `、` nearest `、` wrap `或` interp `。这决定了应用滤波器的填充信号使用的扩展类型。当mode为' constant '时,padding值由cval指定。有关` mirror `、` constant `、` wrap `和` nearest `的更多细节,请参阅注释。当选择` interp `模式(默认)时,不使用扩展。相反,次数多阶多项式拟合边缘的最后一个window_length值,该多项式用于计算最后一个window_length输出值。
- cval(scalar,可选):值填充超过输入的边缘,如果mode为' constant '。默认值是0.0。
- 返回值:Y,过滤后的数据。与x的形状相同的array
示例
随机生成了100个数,画了个图。
# 调用
import matplotlib.pyplot as plt
import random
import scipy.signal
# 生成随机列表
loss=[random.randint(0,50)for i in range(100)]
plt.figure()
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
# loss曲线
plt.plot(loss, 'g', linewidth=2, label='loss')
# 平滑
plt.plot(scipy.signal.savgol_filter(loss, 50, 3), 'b', linestyle='--', linewidth=2,label='smooth train loss')
plt.grid(True)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()
输出结果:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)