python 插值处理一维数据 interpolate

scipy库:

原码: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html

  • kind可选“linear”、“nearest”、“nearest-up”、“zero”、“slinear”、“quadratic”、“cubic”、“previous”或“next”之一。
  • “zero”、“slinear”、“quadratic”、“cubic”是指零阶、一阶、二阶或三阶样条插值;
  • “previous”或“next”简单地返回该点的上一个或下一个值;
  • 在插入半整数(例如 0.5、1.5)时,“nearest-up”和“nearest”不同,“nearest-up”向上舍入,“nearest”向下舍入。
  • kind默认为“线性”
# 想采样到350点,需要设置352点的重采样,因为采样后最后两个值是nan

fig = plt.figure(figsize=(15,5))

for i in range(2):
    x = data[i]
    t = np.arange(0,len(x))   # 原点数
    tn =  np.linspace(0, len(x), 352)  # 重采样后点数
    f = interpolate.interp1d(t, x, kind='quadratic',bounds_error=False) # bounds_error=False 二阶样条插值; 
    xnew = f(tn)
    ax = fig.add_subplot(2, 1, i+1)  # (行总数,列总数,该图编号)
    ax.plot(tn, xnew,'r',label='重采样')      
    ax.plot(t, x, 'b--',label='原数据')
    ax.legend(loc='upper left')
    plt.tight_layout() 
plt.show()

在这里插入图片描述

在这里插入图片描述
重采样的最后两个值是nan,需要截掉


numpy库:

可以选定需要插值的位置

  • numpy.interp(x, xp, fp, left=None, right=None, period=None)
  • x - 表示将要计算的插值点x坐标
  • xp - 表示已有的xp数组
  • fp - 表示对应于已有的xp数组的值
  • left - 表示当x值在xp中最小值左边时,x对应y的值为left
  • right - 表示当x值在xp中最大值右边时,x对应y的值为right
  • (left和right表示x在xp的域外时,y的取值)
# 不会出现采样后最后两个值是nan的情况

fig = plt.figure(figsize=(15,5))

for i in range(2):
    x = data[i]
    t = np.arange(0,len(x))   # 原点数
    tn =  np.linspace(0, len(x), 352)  # 重采样后点数
    xnew = np.interp(tn, t, x ) 
    ax = fig.add_subplot(2, 1, i+1)  # (行总数,列总数,该图编号)
    ax.plot(tn, xnew,'r',label='重采样')      
    ax.plot(t, x, 'b--',label='原数据')
    ax.legend(loc='upper left')
    plt.tight_layout() 
plt.show()

在这里插入图片描述

在这里插入图片描述


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值