插值interpolate模块

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

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

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

一维插值

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

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

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

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy import interpolate
  4.  
  5. x = np.arange(0, 2*np.pi+np.pi/4, 2*np.pi/8)
  6. y = np.sin(x)
  7. tck = interpolate.splrep(x, y) # 样条插值系数
  8. xnew = np.arange(0, 2*np.pi, np.pi/50) # 插值范围
  9. ynew = interpolate.splev(xnew, tck)
  10.  
  11. plt.figure()
  12. plt.plot(x, y, 'rx') # 散点图
  13. plt.plot(xnew, ynew, "*") # 三次样条插值
  14. plt.plot(xnew, np.sin(xnew), "--") # True
  15. plt.plot(x, y, 'b') # 线性插图
  16.  
  17. plt.legend(["Scatter", 'Linear', 'Cubic Spline', 'True'])
  18. plt.axis([-0.05, 6.33, -1.05, 1.05])
  19. plt.title('Cubic-spline interpolation')
  20. 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. python3.6 ubuntu

    apt-get install python3.6-dev 安装 pip install mysqlclient 必备

  2. SWIFT用ScrollView加图片制作Banner

    网上参考OBJC写的用ScrollView图片轮播效果,照着画了个,先上效果图: 附上代码: @IBOutlet weak var pc: UIPageControl! @IBOutlet weak ...

  3. mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系

    mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系   我们先来看一个公式:Mipiclock = [ (width+hsync+hfp+hbp) x (height+vsync+vfp+vb ...

  4. 转:window.orientation判断移动设备横屏竖屏

    通过window.orientation来判断设备横竖屏 function checkOrient() { if (window.orientation == 0 || window.orientat ...

  5. shell 脚本实战笔记(9)--linux自动批量添加用户

    前言: 添加linux用户帐号,这个相对简单, 在面对集群, 许多机器的时候, 我们该如何去做和实现? 这篇短文, 简单讲解一些思路, 尽可能地涉及周边的一些知识点. 不光是运维人员会面临这个问题, ...

  6. CF1096:D. Easy Problem(DP)

    Vasya is preparing a contest, and now he has written a statement for an easy problem. The statement ...

  7. CodeForces - 645F:Cowslip Collections (组合数&&欧拉函数)

    In an attempt to make peace with the Mischievious Mess Makers, Bessie and Farmer John are planning t ...

  8. oracle在进行跨库访问时,采用dblink实现

    首先了解下环境:在tnsnames.ora中配置两个数据库别名:test1/test1@11orcl1.tets2/tets2@12orlc2,在orcl1中创建database link来访问orc ...

  9. django中的FBV和CBV

    django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...

  10. repo学习笔记

    1. 遍历所有的git仓库,并在每个仓库执行-c所指定的命令(被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls . pwd .cp 等 . $ repo forall -c &quo ...