插值,是依据一系列的点(xi,yi)通过一定的算法找到一个合适的函数来包含(逼近)这些点,反应出这些点的走势规律,然后根据走势规律求其他点值的过程。

scipy.interpolate包里有很多类可以实现对一些已知的点进行插值,即找到一个合适的函数,例如,interp1d类,当得到插值函数后便可用这个插值函数计算其他xj对应的的yj值了,这也就是插值的意义所在。

一维插值interp1d

interp1d类可以根据输入的点,创建拟合函数。

准备数据

让我们首先创建一些点,作为输入:

示例

通过采样几个点获取数据:

import numpy as np
from scipy import interpolate as intp
import matplotlib.pyplot as plt
x = np.linspace(0, 4, 12)
y = np.cos(x**2/3 + 4)
print (x)
print (y)

输出

[0.         0.36363636 0.72727273 1.09090909 1.45454545 1.81818182
2.18181818 2.54545455 2.90909091 3.27272727 3.63636364 4. ]
[ 0.28366219 0.29287074 0.35652484 0.52035398 0.78524277 0.99671469
0.70096272 -0.43008856 -0.87804302 0.84953035 -0.4614798 0.4979562 ]

让我们画出这些点:

plt.plot(x, y,’o’)
plt.show()

interp1d 插值

根据上面示例中的数据,使用interp1d类创建拟合函数:

f1 = intp.interp1d(x, y, kind = 'linear')

f2 = intp.interp1d(x, y, kind = 'cubic')

上面创建了两个函数f1和f2。通过这些函数,输入x可以计算y。kind表示插值使用的技术类型,例如:'Linear', 'Nearest', 'Zero', 'Slinear', 'Quadratic', 'Cubic'等等。

现在,增加输入数据,与前面示例比较一下:

xnew = np.linspace(0, 4, 30)

plt.plot(x, y, 'o', xnew, f1(xnew), '-', xnew, f2(xnew), '--')

plt.legend(['data', 'linear', 'cubic','nearest'], loc = 'best')

plt.show()

上面的程序将生成以下输出:

噪声数据插值

可以通过interpolate模块中UnivariateSpline类对含有噪声的数据进行插值运算。

使用UnivariateSpline类,输入一组数据点,通过绘制一条平滑曲线来去除噪声。绘制曲线时可以设置平滑参数s,如果参数s=0,将对所有点(包括噪声)进行插值运算,也就是说s=0时不去除噪声。

示例

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
x = np.linspace(-3, 3, 50)
y = np.exp(-x**2) + 0.1 * np.random.randn(50) # 通过random方法添加噪声数据
plt.plot(x, y, 'ro', ms=5) # 平滑参数使用默认值
spl = UnivariateSpline(x, y)
xs = np.linspace(-3, 3, 1000)
plt.plot(xs, spl(xs), 'b', lw=3) # 蓝色曲线 # 设置平滑参数
spl.set_smoothing_factor(0.5)
plt.plot(xs, spl(xs), 'g', lw=3) # 绿色曲线 # 设置平滑参数为0
spl.set_smoothing_factor(0)
plt.plot(xs, spl(xs), 'yellow', lw=3) # 黄色曲线 plt.show()

输出

SciPy 插值的更多相关文章

  1. scipy插值与拟合

    原文链接:https://zhuanlan.zhihu.com/p/28149195 1.最小二乘拟合 实例1 import numpy as np import matplotlib.pyplot ...

  2. scipy插值interpolation

    >>> from scipy.interpolate import interp1d#interp1d表示1维插值 >>> >>> x = np. ...

  3. SciPy 信号处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  4. SciPy 统计

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  5. SciPy 线性代数

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  6. SciPy 图像处理

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  7. SciPy 优化

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  8. SciPy 积分

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  9. SciPy 输入输出

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

随机推荐

  1. JPA 级联保存的问题

    前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...

  2. leetcode 0210

    目录 ✅ 1207 独一无二的出现次数 描述 解答 java hashMap api java my final solution: c other's solution, 用两个 数组 统计 ✅ 4 ...

  3. pip源、搭建虚拟环境、git

    一.pip源 1.1 介绍 1.采用国内源,加速下载模块的速度2.常用pip源:-- 豆瓣:https://pypi.douban.com/simple-- 阿里:https://mirrors.al ...

  4. 牛客-Y 老师的乐高小镇

    链接:https://ac.nowcoder.com/acm/contest/3667/I来源:牛客网 题目描述 Y 老师从小喜欢用乐高搭建自己喜欢的模型,这不突然有一天 Y 老师想用乐高建造一个神奇 ...

  5. 「AHOI2014/JSOI2014」支线剧情

    「AHOI2014/JSOI2014」支线剧情 传送门 上下界网络流. 以 \(1\) 号节点为源点 \(s\) ,新建一个汇点 \(t\),如果 \(u\) 能到 \(v\),那么连边 \(u \t ...

  6. Faster-RCNN Pytorch实现的minibatch包装

    实际上faster-rcnn对于输入的图片是有resize操作的,在resize的图片基础上提取feature map,而后generate一定数量的RoI. 我想首先去掉这个resize的操作,对每 ...

  7. December 21st, Week 51st Saturday, 2019

    May the odds be ever in your favor. 愿好运永远眷顾你. From The Hunger Games. May we all have good luck, and ...

  8. Layui我提交表单时,table.reload(),表格会请求2次,是为什么?

    重载两次是因为搜索按钮用的是button 改成<a class="layui-btn" data-type="reload">搜索</a> ...

  9. Linux下清空文件的3种方法

    1.echo -n > test.log #-n选项可以去掉空行 2.cat /dev/null > test.log 3.truncate -s 0 test.log

  10. MySQL之可视化软件

    MySQL可视化客户端 多款可视化界面,总有一款适合你 个人推荐使用MySQL官方提供的可视化工具. 下载链接 使用方法链接