插值interpolate模块

计算插值有两个基本方法:

1、对一个完整的数据集去拟合一个函数(一条线穿过所有数据集的)

2、对数据集的不同部分拟合出不同的函数,而函数之间的曲线平滑对接

一维插值

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

x和y参数是一系列已知的数据点,kind参数是插值类型,可以是字符串或整数,

候选值 作用
"zero"、"nearest" 阶梯插值,相当于0阶B样条曲线
‘slinear’ 、'linear' 线性插值,用一条直线连接所有的取样点,相当于一阶B样条曲线
‘quadratic’ 、'cubic' 二阶和三阶B样条曲线,更高阶的曲线可以直接使用整数值指定
import scipy.interpolate
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
# 创建待插值的数据
x= np.array([0, 1, 2, 3, 4, 5, 6, 7])
y= np.array([3, 4, 3.5, 2, 1, 1.5, 1.25, 0.9])
xx = np.linspace(x.min(), x.max(), 1000) # 设置x的最大值和最小值以防止插值数据越界
fig, ax = plt.subplots(figsize=(8, 4)) # 返回窗口和坐标系
ax.scatter(x, y) # 绘制散点图
for n in ['linear','zero', 'slinear', 'quadratic', 'cubic', 5]:
# 线性、阶梯插值、线性插值、二阶插值、三阶B样条插值
f = interp1d(x, y, kind = n) # 得到插值函数
ax.plot(xx, f(xx), label= n)
ax.legend()
ax.set_ylabel("y", fontsize=18)
ax.set_xlabel("x", fontsize=18)
plt.show()

样条插值

样条插值需要两个基本步骤

1、找到一维曲线的B样条表示

scipy.interpolate.splrep(x, y, xb=None, xe=None, k=3, s=None)

参数:

  x,y:定义曲线y=f(x)的数据点

  xb,xe:float 合适的间隔,如果为None,则分别为x[0]和x[-1]

  k:样条的种类,建议使用3次样条,1 <= k <= 5

  s:float,平滑度,用户可以使用s来控制贴近度平滑度之间的权衡。较大的s意味着更平滑,而较小的s意味着较少的平滑。

返回:

  tck:元组,(t, c, k)包含结矢量,B样条系数和样条程度的元组。

2、在期望点处评估B样条

scipy.interpolate.splev(x, tck, der=0, ext=0)

给定B样条表示的节点和系数,评估平滑多项式及其导数的值。

参数:

  x:array_like,一组点,样条的节点数

  tck:元组,由splrep返回的长度为3的系列,包含样条的阶,系数和度数。

  der:int 要计算的样条的倒数的阶数(必须小于或等于k)

返回:ndarray或ndaray列表,表示在x点处计算 的样条函数的值 的数组。

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate x = np.arange(0, 2*np.pi+np.pi/4, 2*np.pi/8)
y = np.sin(x)
tck = interpolate.splrep(x, y) # 样条插值系数
xnew = np.arange(0, 2*np.pi, np.pi/50) # 插值范围
ynew = interpolate.splev(xnew, tck) plt.figure()
plt.plot(x, y, 'rx') # 散点图
plt.plot(xnew, ynew, "*") # 三次样条插值
plt.plot(xnew, np.sin(xnew), "--") # True
plt.plot(x, y, 'b') # 线性插图 plt.legend(["Scatter", 'Linear', 'Cubic Spline', 'True'])
plt.axis([-0.05, 6.33, -1.05, 1.05])
plt.title('Cubic-spline interpolation')
plt.show()

参考文献:

数学建模三剑客MSN

Scipy的更多相关文章

  1. python安装numpy、scipy和matplotlib等whl包的方法

    最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...

  2. win7系统下python安装numpy,matplotlib,scipy和scikit-learn

    1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...

  3. python scipy学习-曲线拟合

    根据某地每月的平均温度[17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18]拟合温度函数. import numpy as np import matplot ...

  4. [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决

    这篇文章主要讲述Python如何安装Numpy.Scipy.Matlotlib.Scikit-learn等库的过程及遇到的问题解决方法.最近安装这个真是一把泪啊,各种不兼容问题和报错,希望文章对你有所 ...

  5. windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等

    安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...

  6. Scipy - Python library - Math tool - Begin

    Introduction Scientific Computing Tools for Python. Seen in Scipy.org. Environment Linux, CentOS 7 w ...

  7. Ubuntu下安装Numpy, SciPy and Matplotlib

    Python开发环境包含科学计算,需要安装NumPy, SciPy, Matplotlib.其中Matplotlib依赖于Python和NumPy.我们先安装NumPY和SciPy.  Matplot ...

  8. scipy科学计算库

    特定函数 例贝塞尔函数: 积分 quad,dblquad,tplquad对应单重积分,双重积分,三重积分 from scipy.integrate import quad,dblquad,tplqua ...

  9. Python导入Scipy子模块时出错

    导入Scipy子模块时报错,出现的问题都是提示 61 from numpy._distributor_init import NUMPY_MKL  # requires numpy+mklNo mod ...

  10. Scipy学习笔记 矩阵计算

    Scipy学习笔记 非本人原创  原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html 1.逆矩阵的求解 >>>impor ...

随机推荐

  1. su:鉴定故障

    deepin中从普通用户切换到管理员时出现su:鉴定故障 使用命令:su root [mylinux@localhost ~]$ su root 密码: su: 鉴定故障 解决方法: 使用命令:sud ...

  2. vue 钩子

    生命周期总结 这么多钩子函数,我们怎么用呢,我想大家可能有这样的疑问吧,我也有,哈哈哈. beforecreate : 举个栗子:可以在这加个loading事件 created :在这结束loadin ...

  3. UWP 在 WebView 中执行 JavaScript 代码(用于模拟用户输入等)

    UWP 中使用 WebView 时可以在网页中额外执行一些代码.于是你几乎可以在网页上做任何事情,那些你可以在浏览器控制台中做的事情. 本文将介绍做法. 本文内容 准备环境 执行 JavaScript ...

  4. streamsets 3.5 的一些新功能

    streamsets 3.5 有了一些新的特性以及增强,总之是越来越方便了,详细的可以 查看官方说明,以下简单例举一些比较有意义的. origins 新的pulsar 消费origin jdbc 多表 ...

  5. apache airflow docker 运行简单试用

    airflow 是一个编排.调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化. airflow 将workflow编排为tasks ...

  6. nodejs express 学习

    nodejs的大名好多人应该是听过的,而作为nodejs web 开发的框架express 大家也应该比较熟悉. 记录一下关于express API 的文档: express() 创建express ...

  7. [LeetCode系列] 从中序遍历和后序遍历序列构造二叉树(迭代解法)

    给定中序遍历inorder和后序遍历postorder, 请构造出二叉树. 算法思路: 设后序遍历为po, 中序遍历为io. 首先取出po的最后一个节点作为根节点, 同时将这个节点入stn栈; 随后比 ...

  8. tomcat源码阅读之容器(Container)

    一. 实现容器的接口是Container接口,Tomcat中共有四种类型的容器: 1.Engine:表示整个Catalina Servlet引擎: 2.Host:表示含有一个或者多个Context容器 ...

  9. java中使用MD5加密的算法

    MD5,全名Message Digest Algorithm 5,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.以下是JAVA语言中使用MD5加密的工具 ...

  10. vuex 知识点

    Action 类似于 mutation,不同在于: 1.Action 提交的是 mutation,而不是直接变更状态. 2.Action 可以包含任意异步操作. mutation是同步的,当需要异步操 ...