scipy包提供了几种通用的插补工具,分别用于1维,2维或高维的数据集,分别是:

  • 类 interp1d 用于对一维数据进行插补
  • 类 griddata 提供了对1D,2D和高维数据进行插补的工具。
  • spline插补, 用于对一维和二维数据进行平滑的cubic-spline 插补
  • 使用基于径向的函数(RBF)进行插值

这些方法都集成在scipy.interpolate模块中。

一,interp1d类

一维插补类(interp1d),是一种基于一维固定数据点创建函数的便捷方法,该函数内推一个一元的函数f,使得 y=f(x):

scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)

kind 参数用于指定内推的类型,(‘linear’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, ‘next’和 ‘nearest’。对于'linear',是默认值,表示线性插补,前面已描述;对于 ‘zero’, ‘slinear’, ‘quadratic’ 和 ‘cubic’ 引用的是spline内推,使用 zeroth, first, second 和 third 顺序。对于 ‘previous’ 、 ‘next’ 和  ‘nearest’ 简单返回数据点的前一个、后一个或最近的一个数据。

举个例子,使用interp1d内推两个函数,并绘制两个函数插补的数据点:

>>> import scipy
>>> from scipy.interpolate import interp1d
>>> x = np.linspace(0, 10, num=11, endpoint=True)
>>> y = np.cos(-x**2/9.0)
>>> f = interp1d(x, y)
>>> f2 = interp1d(x, y, kind='cubic')
>>> xnew = np.linspace(0, 10, num=41, endpoint=True)
>>> import matplotlib.pyplot as plt
>>> plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--')>>> plt.legend(['data', 'linear', 'cubic'], loc='best')
>>> plt.show()

二,多变量插补(griddata)

对于多维的数据,维度之间是相互关联的,例如,age、education和income是相互关联的,可以认为income = f(age,education)。对于二维数据,使用griddata 内推一个二元函数,z=f(x,y)。

scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan, rescale=False)

参数注释:

  • points:自变量,对于二元函数而言,points是指由(x,y)构成的数据点
  • values:因变量,values是指某一个数据点的值,对于二元函数而言,数据点(x,y)的值是z=f(x,y)
  • xi:坐标系,或者说是数据点在坐标系中的位置,也可以把points的值作为坐标系的x和y轴,把values作为坐标系的z轴
  • method:有效值是‘linear’, ‘nearest’, ‘cubic’

三,spline类

一维spline的处理过程分为两个基本步骤:计算曲线的spline表示,对目标点进行评估。scipy有两种方式来计算曲线的spline表示和平滑系数:直接方式和参数化方式。

1,直接方式

直接方式使用splrep()函数从2维平面中查找曲线的spline表示,x和y是曲线在二维坐标系中的坐标。

splrep()函数的作用是对于给定数据点集(x [i],y [i]),确定在间隔xb <= x <= xe上平滑度为k的近似值。

scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)

参数注释:

  • x和y定义一个曲线,y=f(x)
  • w 权重,用于在spline拟合时计算加权最小二乘法的值,w的默认值为1/(len(x))。如果y值中的误差是向量d给出的标准偏差,则w应为1 / d。
  • xb,xe:用于拟合的间隔,如果没有指定,那么默认值分别是x[0] 和 x[-1]。
  • k  用于指定spline order,默认值是3,字符串表示为cubic,k的取值区间是[1,5]
  • s 用于制定平滑条件,满足以下条件来确定平滑度:sum((w *(y-g))** 2,axis = 0)<= s,其中g(x)是(x,y)的平滑插值。 用户可以使用s来控制贴合度和平滑度之间的权衡,较大的s表示更平滑,而较小的s值表示较不平滑。s的推荐值取决于权重w。 如果权重代表y的标准偏差的倒数,则应在(m-sqrt(2 * m),m + sqrt(2 * m))范围内找到一个好的s值,其中m是 x,y和w中的数据点。 默认值:如果提供了权重,则s = m-sqrt(2 * m)。 如果未提供权重,则s = 0.0(内插)。

该函数输出的结果是一个三元组tck,这个三元组就是曲线的spline表示,用于表示曲线的节点向量、系数和spline序号,默认的spline orde是cubic,这可以通过k参数来修改。一旦确定了曲线的spline表示,就可以使用splev()函数对x进行评估:

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

举个例子,使用splrep()函数来获取曲线的spline表示,也就是tck,再通过tck和splev()函数来评估曲线:

>>> import matplotlib.pyplot as plt
>>> from scipy.interpolate import splev, splrep
>>> x = np.linspace(0, 10, 10)
>>> y = np.sin(x)
>>> spl = splrep(x, y)
>>> x2 = np.linspace(0, 10, 200)
>>> y2 = splev(x2, spl)
>>> plt.plot(x, y, 'o', x2, y2)
>>> plt.show()

2,参数化方式

对于在N维空间中的区间,使用函数splprep()来定义曲线的参数:

scipy.interpolate.splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None, full_output=0, nest=None, per=0)

参数注释:

  • x:代表N维空间中曲线的N个数组的列表,每个数组的长度都是曲线的点的数量,每一个数组都提供N维数据点的一个分量。
  • u:是参数值的数组,该参数默认为0到1之间的等距单调序列,计算公式是:

M = len(x[0]), where v[0] = 0
v[i] = v[i-1] + distance(x[i], x[i-1])
u[i] = v[i] / v[M-1]

  • ub,ue:参数间隔的端点,默认值是 u [0]和u [-1]。
  • k:spline拟合的度,推荐使用默认值k=3,表示cubic,k的取值区间是[1,5]
  • s:平滑度,是0到1之间的小数,0表示不平滑,值越大,平滑度越高。
  • per:如果非0,那么把数据点视为周期性曲线,周期为x [m-1]-x [0],并返回平滑的周期样条近似。

默认输出包含两个对象:第一个对象是一个三元祖(t,c,k),分别表示曲线的节点向量、系数和spline序号;第二个对象是一个参数变量u。

 

对于函数splprep() 返回的spline表示,使用splev()函数来评估

>>> from scipy.interpolate import splprep, splev
>>> tck, u = splprep([x, y], s=0)
>>> new_points = splev(u, tck)
>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots()
>>> ax.plot(x, y, 'ro')
>>> ax.plot(new_points[0], new_points[1], 'r-')
>>> plt.show()

参考文档:

SciPy documentation

SciPy tutorial.

R绘图 第十篇:绘制文本、注释和主题(ggplot2)的更多相关文章

  1. R绘图 第四篇:绘制箱图(ggplot2)

    箱线图通过绘制观测数据的五数总括,即最小值.下四分位数.中位数.上四分位数以及最大值,描述了变量值的分布情况.箱线图能够显示出离群点(outlier),离群点也叫做异常值,通过箱线图能够很容易识别出数 ...

  2. R绘图 第五篇:绘制散点图(ggplot2)

    ggplot2包中绘制点图的函数有两个:geom_point和 geom_dotplot,当使用geom_dotplot绘图时,point的形状是dot,不能改变点的形状,因此,geom_dotplo ...

  3. R绘图 第十二篇:散点图(高级)

    散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示. 一,添加了最佳拟合曲线的散点图 使用基础函数plot(x,y)来 ...

  4. R绘图 第七篇:绘制条形图(ggplot2)

    使用geom_bar()函数绘制条形图,条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_ba ...

  5. R绘图 第八篇:绘制饼图(ggplot2)

    geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y": coord_polar(th ...

  6. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  7. 【Windows编程】系列第十篇:文本插入符

    大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符 ...

  8. R绘图 第十一篇:统计转换、位置调整、标度和向导(ggplot2)

    统计转换和位置调整是ggplot2包中的重要概念,统计转换通常使用stat参数来引用,位置调整通常使用position参数来引用. bin是分箱的意思,在统计学中,数据分箱是一种把多个连续值分割成多个 ...

  9. R实战 第十篇:列联表和频数表

    列联表是观测数据按两个或更多属性(定性变量)分类时所列出的频数分布表,它是由两个以上的变量进行交叉分类的频数分布表.交互分类的目的是将两变量分组,然后比较各组的分布状况,以寻找变量间的关系. 按两个变 ...

随机推荐

  1. LeetCode题解之 Reverse Only Letters

    1.题目描述 2.题目描述 利用栈实现逆序. 3.代码 string reverseOnlyLetters(string S) { || S.size() == ) return S; stack&l ...

  2. Inception开源公告

    关于Inception MySQL语句的审核,在业界都已经基本被认同了,实际上也是对MySQL语句写法的统一化,标准化,而之前的人工审核,针对标准这个问题其实是很吃力的,标准越多,DBA越累,开发也越 ...

  3. 转:C#综合揭秘——细说进程、应用程序域与上下文之间的关系

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

  4. 转:C# 深入理解堆栈、堆在内存中的实现

    尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(GarbageCollection),但是我们还是应该了解它们,以优化我们的应用程序.同时,还需要具备一些基础的内存管理工作机制 ...

  5. crm lookup

    1. 大家都知道CRM 里面的Lookup 保存了相关实体的GUID,让我们深入的了解一下CRM Lookup.当我们在2个实体间建立关系的时候,CRM自动生成了一些attributes来保存相关实体 ...

  6. java实现安全证书相关操作

    https://blog.csdn.net/zhushanzhi/article/details/77864516 版权声明:本文为博主原创文章,未经博主允许不得转载. package test; i ...

  7. 关于在Win10的Windows功能中没有IE11的问题

    大概是用Win7的时候把IE关掉了,升级Win10之后就发现IE不见了,在Windows功能里面也没有:最近因为某些原因需要用到IE,还是用的虚拟机. 网上找到的方法普遍是执行命令:FORFILES ...

  8. javascript,object,IDispatchEx笔记

    //js: var testObj=new Object; //com内部: testObj=Object::InvokeEx(wFlags==DISPATCH_CONSTRUCT); //注: // ...

  9. 【8】python文件的读写方法

    (1).读文件的步骤: (1)打开文件 open(path,flag,encoding,[errors]) path:打开路径 flag:打开方式 r(只读) rb(二进制格式) r+(可以读写) w ...

  10. facebook api & oauth protocal

    http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-10.5 http://stackoverflow.com/questions/14 ...