【python】scipy.signal.savgol_filter()

目录

作用​

参数设置

示例


作用

对数组应用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()

 输出结果:

官方: ​​​​​​scipy.signal.savgol_filter — SciPy v1.10.1 Manual

猜你喜欢

转载自blog.csdn.net/m0_70813473/article/details/130293479
今日推荐