Scipy
插值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()
参考文献:
Scipy的更多相关文章
- python安装numpy、scipy和matplotlib等whl包的方法
最近装了python和PyCharm开发环境,但是在安装numpy和matplotlib等包时出现了问题,现总结一下在windows平台下的安装方法. 由于现在找不到了工具包新版本的exe文件,所以采 ...
- win7系统下python安装numpy,matplotlib,scipy和scikit-learn
1.安装numpy,matplotlib,scipy和scikit-learn win7系统下直接采用pip或者下载源文件进行安装numpy,matplotlib,scipy时会遇到各种问题,这是因为 ...
- python scipy学习-曲线拟合
根据某地每月的平均温度[17, 19, 21, 28, 33, 38, 37, 37, 31, 23, 19, 18]拟合温度函数. import numpy as np import matplot ...
- [python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决
这篇文章主要讲述Python如何安装Numpy.Scipy.Matlotlib.Scikit-learn等库的过程及遇到的问题解决方法.最近安装这个真是一把泪啊,各种不兼容问题和报错,希望文章对你有所 ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
- Scipy - Python library - Math tool - Begin
Introduction Scientific Computing Tools for Python. Seen in Scipy.org. Environment Linux, CentOS 7 w ...
- Ubuntu下安装Numpy, SciPy and Matplotlib
Python开发环境包含科学计算,需要安装NumPy, SciPy, Matplotlib.其中Matplotlib依赖于Python和NumPy.我们先安装NumPY和SciPy. Matplot ...
- scipy科学计算库
特定函数 例贝塞尔函数: 积分 quad,dblquad,tplquad对应单重积分,双重积分,三重积分 from scipy.integrate import quad,dblquad,tplqua ...
- Python导入Scipy子模块时出错
导入Scipy子模块时报错,出现的问题都是提示 61 from numpy._distributor_init import NUMPY_MKL # requires numpy+mklNo mod ...
- Scipy学习笔记 矩阵计算
Scipy学习笔记 非本人原创 原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html 1.逆矩阵的求解 >>>impor ...
随机推荐
- OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏
OC:Objective-c 面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...
- [Python] 网络编程之TCP编程
转自:TCP编程 - 廖雪峰的官方网站 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协 ...
- 为什么要使用AOP
首先,按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类当中去.比如Horse.Pig.Camel这些对象都有run().eat()方法,通 ...
- 外部获取IndexPath的几种方式(关联对象等)
1. 一般方式 - (void)buttonAction:(UIButton *)sender { UITableViewCell *cell = (UITableViewCell *)[[sende ...
- 【ssm】拦截器的原理及实现
一.背景: 走过了双11,我们又迎来了黑色星期五,刚过了黑五,双12又将到来.不管剁手的没有剁手的,估计这次都要剁手了!虽然作为程序猿的我,没有钱但是我们长眼睛了,我们关注到的是我们天猫.淘宝.支付宝 ...
- Linux命令行操作进程
参见 12个进程管理命令介绍 Linux如何查看进程.杀死进程.启动进程等常用命令
- 重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(转)
BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服 ...
- graphql elasticsearch 集成试用
graphql 是很方便的api 查询语言,elasticsearch 可以方便的进行全文检索的应用开发 有一个方便的npm 包graphql-compose-elasticsearch 可以进行es ...
- Hadoop和云计算
什么是Hadoop? Hadoop代表的就是基于异步存储(HDFS)的并行计算(Map-Reduce). 首先Hdsf/ Kudu他的存储是分布式的存储,hive(map-reduce).impala ...
- Dynamics CRM 2011 怎么根据记录的etc参数值找到实体英文名和根据etc参数值或英文名称找到其实体中文名称
一.平常我们可以打开CRM2011一条已创建的记录,通过JScript方法获取实体英文名的方法是:按F12,输入contentIFrame.Xrm.Page.data.entity.getEntity ...