简单制作单高斯和的参数化模型函数。为最初的猜测选择一个好的值(这是一个非常关键的步骤),然后让scipy.optimize稍微调整一下这些数字。

你可以这样做:import numpy as np

import matplotlib.pyplot as plt

from scipy import optimize

data = np.genfromtxt('data.txt')

def gaussian(x, height, center, width, offset):

return height*np.exp(-(x - center)**2/(2*width**2)) + offset

def three_gaussians(x, h1, c1, w1, h2, c2, w2, h3, c3, w3, offset):

return (gaussian(x, h1, c1, w1, offset=0) +

gaussian(x, h2, c2, w2, offset=0) +

gaussian(x, h3, c3, w3, offset=0) + offset)

def two_gaussians(x, h1, c1, w1, h2, c2, w2, offset):

return three_gaussians(x, h1, c1, w1, h2, c2, w2, 0,0,1, offset)

errfunc3 = lambda p, x, y: (three_gaussians(x, *p) - y)**2

errfunc2 = lambda p, x, y: (two_gaussians(x, *p) - y)**2

guess3 = [0.49, 0.55, 0.01, 0.6, 0.61, 0.01, 1, 0.64, 0.01, 0] # I guess there are 3 peaks, 2 are clear, but between them there seems to be another one, based on the change in slope smoothness there

guess2 = [0.49, 0.55, 0.01, 1, 0.64, 0.01, 0] # I removed the peak I'm not too sure about

optim3, success = optimize.leastsq(errfunc3, guess3[:], args=(data[:,0], data[:,1]))

optim2, success = optimize.leastsq(errfunc2, guess2[:], args=(data[:,0], data[:,1]))

optim3

plt.plot(data[:,0], data[:,1], lw=5, c='g', label='measurement')

plt.plot(data[:,0], three_gaussians(data[:,0], *optim3),

lw=3, c='b', label='fit of 3 Gaussians')

plt.plot(data[:,0], two_gaussians(data[:,0], *optim2),

lw=1, c='r', ls='--', label='fit of 2 Gaussians')

plt.legend(loc='best')

plt.savefig('result.png')

如您所见,这两种配合(视觉上)几乎没有区别。所以你不能确定源中是否有3个高斯子,或者只有2个高斯子。但是,如果您必须进行猜测,请检查最小的残差:err3 = np.sqrt(errfunc3(optim3, data[:,0], data[:,1])).sum()

err2 = np.sqrt(errfunc2(optim2, data[:,0], data[:,1])).sum()

print('Residual error when fitting 3 Gaussians: {}\n'

'Residual error when fitting 2 Gaussians: {}'.format(err3, err2))

# Residual error when fitting 3 Gaussians: 3.52000910965

# Residual error when fitting 2 Gaussians: 3.82054499044

在这种情况下,3高斯给出了一个更好的结果,但我也使我的初步猜测相当准确。

python连接高斯数据库_Python加载数据并执行多高斯fi相关推荐

  1. python连接oracle数据库 插入clob类型数据

    python连接oracle数据库 插入clob类型数据 连接数据库 import cx_Oracle as cx #导入模块 con = cx.connect('root', 'root123', ...

  2. 用python的五种方式_Python加载数据的5种不同方式(收藏)

    数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要.在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考. 作为初学者,您可能只知道一种使用p andas.read_ ...

  3. python数据加载常规教程_Python加载数据的5种不同方式(收藏)

    数据是数据科学家的基础,因此了解许多加载数据进行分析的方法至关重要.在这里,我们将介绍五种Python数据输入技术,并提供代码示例供您参考. 作为初学者,您可能只知道一种使用p andas.read_ ...

  4. python处理csv文件缺失值_python 加载数据是-1为缺失值时替换为空

    最近在工作时,加载数据,原始数据用-1代表缺失值,之前加载的时候替换一直没有成功,后来直接把原文件的给改下,才去替换的. 今天 试了下如下方法,可行: 1. 加载数据时直接加载为str型: 2. 把- ...

  5. python爬虫之Ajax动态加载数据抓取--豆瓣电影/腾讯招聘

    动态加载数据抓取-Ajax 特点 1.右键 -> 查看网页源码中没有具体数据 2.滚动鼠标滑轮或其他动作时加载 抓取 1.F12打开控制台,页面动作抓取网络数据包 2.抓取json文件URL地址 ...

  6. python脚本迁移数据库_Python迁移MySQL数据到MongoDB脚本

    MongoDB是一个文档数据库,在存储小文件方面存在天然优势.随着业务求的变化,需要将线上MySQL数据库中的行记录,导入到MongoDB中文档记录. 一.场景:线上MySQL数据库某表迁移到Mong ...

  7. python连接sql数据库_python连接SQL数据库

    前言 上次通过学习,懂得了如何通过不同的对象来定位页面的元素(id,class_name,tag_name,xpath,css等),可以实现模拟点击的功能.当然,这只是初期的web自动化的一点小成绩. ...

  8. java中class.forname连接mysql数据库_Java加载数据库连接驱动,为什么要用Class.forName()方法?...

    展开全部 目的是为了实例化对象. Class.forName("")返回的是类e68a84323131333532363134313032313635333133336564363 ...

  9. python连接sql数据库_python连接sql server数据库实现增删改查

    简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html).在官 ...

最新文章

  1. LeetCode简单题之在既定时间做作业的学生人数
  2. 用漫画的方式理解共享锁和排他锁
  3. java 创建ssh用户秘钥,安装Java、Maven、Git,以及生成、拷贝密钥
  4. vSphere 6.5 Upgrade Considerations Part-3(vSphere 6.5升级注意事项第3部分)
  5. 设计模式的征途—4.抽象工厂(Abstract Factory)模式
  6. 设为首页/加入收藏代码
  7. sscanf_s函数用法
  8. 超火的快闪文字视频制作,用这个软件就能轻松学会
  9. Ansible9:变量之Fact
  10. 【一起入门NLP】中科院自然语言处理作业一:RNN,DNN,CNN 进行猫狗分类(pytorch入门)【代码+报告】
  11. 在精不在多,3 分钟看 3 个 JS 小把戏
  12. Axure获取焦点动画
  13. Elasticsearch学习(二)————搜索
  14. 高校教室多媒体设备报修管理系统
  15. Spark RDD用法
  16. Argo-DCS数据传输笔记
  17. 21天养成编程习惯:09月Scratch编程训练营计划!
  18. python读txt的各种操作(逗号,tab键,空格隔开,转成list)
  19. matlab编程与最优化设计应用,MATLAB编程与最优化设计应用
  20. 给打算创建一个欢乐的婚礼建议

热门文章

  1. 一次二次开发中的经验与教训(一)
  2. cmake的使用--从零建立一个小cmake工程
  3. ARM中C语言和汇编语言的混合编程
  4. 【CyberSecurityLearning 附】渗透测试技术选择题 + 法律法规
  5. 【CyberSecurityLearning 32】Apache配置、Apache的访问控制设定、LAMP平台的搭建
  6. 操作符offset 和 jmp指令
  7. final 字符常量——确定一个值后该值无法改动,使变量变字符常量
  8. Java中this的简单应用
  9. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
  10. Java I/O模型从BIO到NIO和Reactor模式