利用python做数据拟合详情


Posted in Python onNovember 17, 2021

1、例子:拟合一种函数Func,此处为一个指数函数。

出处:

SciPy v1.1.0 Reference Guide

#Header
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

#Define a function(here a exponential function is used)
def func(x, a, b, c):
 return a * np.exp(-b * x) + c

#Create the data to be fit with some noise
xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
np.random.seed(1729)
y_noise = 0.2 * np.random.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'bo', label='data')

#Fit for the parameters a, b, c of the function func:
popt, pcov = curve_fit(func, xdata, ydata)
popt #output: array([ 2.55423706, 1.35190947, 0.47450618])
plt.plot(xdata, func(xdata, *popt), 'r-',
 label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

#In the case of parameters a,b,c need be constrainted
#Constrain the optimization to the region of 
#0 <= a <= 3, 0 <= b <= 1 and 0 <= c <= 0.5
popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5]))
popt #output: array([ 2.43708906, 1. , 0.35015434])
plt.plot(xdata, func(xdata, *popt), 'g--',
 label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

#Labels
plt.title("Exponential Function Fitting")
plt.xlabel('x coordinate')
plt.ylabel('y coordinate')
plt.legend()
leg = plt.legend()  # remove the frame of Legend, personal choice
leg.get_frame().set_linewidth(0.0) # remove the frame of Legend, personal choice
#leg.get_frame().set_edgecolor('b') # change the color of Legend frame
#plt.show()

#Export figure
#plt.savefig('fit1.eps', format='eps', dpi=1000)
plt.savefig('fit1.pdf', format='pdf', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')
plt.savefig('fit1.jpg', format='jpg', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')

上面一段代码可以直接在spyder中运行。得到的JPG导出图如下:

利用python做数据拟合详情

2. 例子:拟合一个Gaussian函数

出处:LMFIT: Non-Linear Least-Squares Minimization and Curve-Fitting for Python

#Header
import numpy as np
import matplotlib.pyplot as plt
from numpy import exp, linspace, random
from scipy.optimize import curve_fit

#Define the Gaussian function
def gaussian(x, amp, cen, wid):
 return amp * exp(-(x-cen)**2 / wid)

#Create the data to be fitted
x = linspace(-10, 10, 101)
y = gaussian(x, 2.33, 0.21, 1.51) + random.normal(0, 0.2, len(x))
np.savetxt ('data.dat',[x,y])  #[x,y] is is saved as a matrix of 2 lines

#Set the initial(init) values of parameters need to optimize(best)
init_vals = [1, 0, 1] # for [amp, cen, wid]

#Define the optimized values of parameters
best_vals, covar = curve_fit(gaussian, x, y, p0=init_vals)
print(best_vals) # output: array [2.27317256  0.20682276  1.64512305]

#Plot the curve with initial parameters and optimized parameters
y1 = gaussian(x, *best_vals) #best_vals, '*'is used to read-out the values in the array
y2 = gaussian(x, *init_vals) #init_vals
plt.plot(x, y, 'bo',label='raw data')
plt.plot(x, y1, 'r-',label='best_vals')
plt.plot(x, y2, 'k--',label='init_vals')
#plt.show()

#Labels
plt.title("Gaussian Function Fitting")
plt.xlabel('x coordinate')
plt.ylabel('y coordinate')
plt.legend()
leg = plt.legend()  # remove the frame of Legend, personal choice
leg.get_frame().set_linewidth(0.0) # remove the frame of Legend, personal choice
#leg.get_frame().set_edgecolor('b') # change the color of Legend frame
#plt.show()

#Export figure
#plt.savefig('fit2.eps', format='eps', dpi=1000)
plt.savefig('fit2.pdf', format='pdf', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')
plt.savefig('fit2.jpg', format='jpg', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')

上面一段代码可以直接在spyder中运行。得到的JPG导出图如下:

利用python做数据拟合详情

3. 用一个lmfit的包来实现2中的Gaussian函数拟合

需要下载lmfit这个包,下载地址:

https://pypi.org/project/lmfit/#files

下载下来的文件是.tar.gz格式,在MacOS及Linux命令行中解压,指令:

将其中的lmfit文件夹复制到当前project目录下。

上述例子2中生成了data.dat,用来作为接下来的方法中的原始数据。

 出处:

Modeling Data and Curve Fitting

#Header
import numpy as np
import matplotlib.pyplot as plt
from numpy import exp, loadtxt, pi, sqrt
from lmfit import Model

#Import the data and define x, y and the function
data = loadtxt('data.dat')
x = data[0, :]
y = data[1, :]
def gaussian1(x, amp, cen, wid):
 return (amp / (sqrt(2*pi) * wid)) * exp(-(x-cen)**2 / (2*wid**2))

#Fitting
gmodel = Model(gaussian1)
result = gmodel.fit(y, x=x, amp=5, cen=5, wid=1) #Fit from initial values (5,5,1)
print(result.fit_report())

#Plot
plt.plot(x, y, 'bo',label='raw data')
plt.plot(x, result.init_fit, 'k--',label='init_fit')
plt.plot(x, result.best_fit, 'r-',label='best_fit')
#plt.show()


#Labels
plt.title("Gaussian Function Fitting")
plt.xlabel('x coordinate')
plt.ylabel('y coordinate')
plt.legend()
leg = plt.legend()  # remove the frame of Legend, personal choice
leg.get_frame().set_linewidth(0.0) # remove the frame of Legend, personal choice
#leg.get_frame().set_edgecolor('b') # change the color of Legend frame
#plt.show()

#Export figure
#plt.savefig('fit3.eps', format='eps', dpi=1000)
plt.savefig('fit3.pdf', format='pdf', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')
plt.savefig('fit3.jpg', format='jpg', dpi=1000, figsize=(8, 6), facecolor='w', edgecolor='k')

上面这一段代码需要按指示下载lmfit包,并且读取例子2中生成的data.dat

得到的JPG导出图如下:

利用python做数据拟合详情

到此这篇关于利用python做数据拟合详情的文章就介绍到这了,更多相关python做数据拟合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
深入浅析Python字符编码
Nov 12 Python
Python 实现随机数详解及实例代码
Apr 15 Python
Python中字典和集合学习小结
Jul 07 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python多项式回归的实现方法
Mar 11 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Python如何给你的程序做性能测试
Jul 29 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 Python
Python Matplotlib库实现画局部图
Nov 17 #Python
python实现局部图像放大
Pygame Draw绘图函数的具体使用
Pygame Rect区域位置的使用(图文)
Nov 17 #Python
分析Python list操作为什么会错误
Nov 17 #Python
深入理解Pytorch微调torchvision模型
Nov 11 #Python
Python 中 Shutil 模块详情
Nov 11 #Python
You might like
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
收藏的一个php小偷的核心程序
2007/04/09 PHP
php strcmp使用说明
2010/04/22 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
vue实现选中效果
2020/10/07 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
Python递归函数定义与用法示例
2017/06/02 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
python中的计时器timeit的使用方法
2017/10/20 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
台湾生鲜宅配:大口市集
2017/10/14 全球购物
化学教师教学反思
2014/01/17 职场文书
在校生自我鉴定
2014/01/23 职场文书
赞美老师的演讲稿
2014/05/22 职场文书
消防安全宣传口号
2014/06/10 职场文书
单位未婚证明范本
2014/11/25 职场文书
学校捐书倡议书
2015/04/27 职场文书
用React Native制作一个简单的游戏引擎
2021/05/27 Javascript