利用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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
gearman的安装启动及python API使用实例
Jul 08 Python
用Python制作检测Linux运行信息的工具的教程
Apr 01 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Python信息抽取之乱码解决办法
Jun 29 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
pytorch训练imagenet分类的方法
Jul 27 Python
python 调用有道api接口的方法
Jan 03 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
pycharm sciview的图片另存为操作
Jun 01 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
php学习之 认清变量的作用范围
2010/01/26 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
用Python编写web API的教程
2015/04/30 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
使用python远程操作linux过程解析
2019/12/04 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
销售经理工作职责
2014/02/03 职场文书
会议主持词
2014/03/17 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
2015年党总支工作总结
2015/05/25 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL