问题


有许多待拟合的曲线,需批量拟合。

解决


写一个类

 # -*- coding: utf-8 -*-
"""
@author: kurrrr
""" import numpy as np
import matplotlib.pyplot as plt
import struct
from scipy.optimize import curve_fit t_pre = 26 # global
p = 0.6 # global
q = 1.2 # global class Signal(object):
_t = [x/250.0 for x in range(0, 20000)] def __init__(self):
self._u = [] @property
def u(self):
return self._u @u.setter
def u(self, u):
self._u = u @property
def t(self):
return self._t def draw(self):
plt.scatter(self._t, self._u, marker='.', label="original data")
plt.show() def get_baseline(self):
return np.mean(self._u[0:250]) # 250 points to get baseline def get_max(self):
return np.max(self._u) def get_max_t(self):
return np.argmax(self._u)/250.0 '''
t_pre : preamplifier tau
b: number of fast photons
c: number of slow photons
p: tau of fast photons
q: tau of slow photons
v: x offset
w: y offset
''' def pre_func_1(x, w):
return w def pre_func_2(x, b, c, p, q, v, w):
global t_pre
return b*t_pre/(t_pre-p) * \
(np.exp(-(x-v)/t_pre)-np.exp(-(x-v)/p)) \
+ c*t_pre/(t_pre-q) * \
(np.exp(-(x-v)/t_pre)-np.exp(-(x-v)/q)) + w def pre_func(x, b, c, p, q, v, w):
return np.piecewise(x, [x < v, x >= v], [lambda x: pre_func_1(x, w),
lambda x: pre_func_2(x, b, c, p, q, v, w)]) def main():
global t_pre
global p
global q data_file = open('run0035.bin', 'rb')
signal = Signal() fast = []
slow = []
u_temp = []
for n in range(10000):
u_temp.clear()
for _ in range(0, 20000):
data_temp = data_file.read(2)
data_dec, = struct.unpack('h', data_temp)
u_temp.append(-data_dec)
signal.u = u_temp u_baseline = signal.get_baseline()
u_max = signal.get_max()
t_max = signal.get_max_t()
b = (u_baseline - u_max) / 2.0
c = (u_baseline - u_max) / 2.0
v = t_max
w = u_max fit_par = [b, c, p, q, v, w]
popt, pcov = curve_fit(pre_func, signal.t,
signal.u, fit_par, maxfev=50000) if popt[2] < popt[3]:
fast.append(popt[2])
slow.append(popt[3])
else:
fast.append(popt[3])
slow.append(popt[2]) fast_slow = list(zip(fast, slow))
for xx in fast_slow:
if xx[0] > 100 or xx[1] >100:
fast_slow.remove(xx) fast_new = []
slow_new = []
for xx in fast_slow:
fast_new.append(xx[0])
slow_new.append(xx[1])
plt.scatter(fast_new, slow_new, marker='.')
plt.show() data_file.close() if __name__ == '__main__':
main()
  • 第 114 行,通过 zip() 函数将两个 list 关联,做成一个新的列表,其元素是元组。

python应用 曲线拟合03的更多相关文章

  1. Python web前端 03 CSS属性

    Python web前端 03 CSS属性 一.文字.文本属性 1.文字属性 font-family #字体类型浏览器默认的字体是微软雅黑,字体中有多个字体的时候,如果前面的字体没有就使用后面的字体 ...

  2. Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信

    Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...

  3. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  4. python应用 曲线拟合04

    python应用 曲线拟合04 → 多项式拟合 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲 ...

  5. Python学习总结 03 Plotly 学习总结

    一 Plotly 简介 Plotly是另一个免费进行数据分析和绘制图表的APP,建立在d3.js上. Plotly图可下载为SVG,EPS或PNG格式,并简单地导入到Illustrator或者Phot ...

  6. python学习总结03

    1.开启虚拟技术 1.1 安装virtualenv 1.1.1 在python环境中运行pip install virtualenv 出现如下信息表示安装成功 1.1.2 进入python的Scrip ...

  7. Python标准库03 路径与文件 (os.path包, glob包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 路径与文件的简介请参看Linux文件系统 os.path包 os.path包主要是 ...

  8. Python快速学习03:运算 & 缩进和选择

    前言 系列文章:[传送门] 这篇昨晚本来要出的,去搭了帐篷,在学校的屋顶上. 运算 运算,不得不说的是运算符. 数学 +, -, *, /, **, %,// 判断 ==, !=, >, > ...

  9. Python Revisited Day 03 (组合数据类型)

    目录 第三章 组合数据类型 3.1 序列类型 3.1.1 元组 3.1.2 命名的元组 (collections.nametuple()) 3.1.3 列表 (查询有关函数点这) 3.1.4 列表内涵 ...

随机推荐

  1. System.out.println()相关源码

    System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...

  2. 2020-07-11:session和cookie的区别是什么?

    福哥答案2020-07-11: 1.保存位置:session服务端.cookie客户端.2.安全性:session相对安全,cookie相对不安全.3.存储类型:session能够存储任意的对象,co ...

  3. Linux根目录下文件夹用途解释

    root目录:主要用于存放root用户相关文件的目录: usr目录:安装一个软件时,linux指定的此软件默认安装的目录: home目录:用于存放普通用户的相关文件的目录:例如:我使用adduser ...

  4. 文件上传控件bootstrap-fileinput中文设置没有效果的情况

    1.引入zh.js顺序错误 zh.js需放到fileinput.js下面 2. 组件创建语法错误 (class=“file”) 如果你使用js初始化fileinput组件,那么在html元素中应删除 ...

  5. Spring - RestTemplate执行原理分析

    什么是RestTemplate Synchronous client to perform HTTP requests, exposing a simple, template method API ...

  6. CSS动画实例:Loading加载动画效果(一)

    一些网站或者APP在加载新东西的时候,往往会给出一个好看有趣的Loading图,大部分的Loading样式都可以使用CSS3制作出来,它不仅比直接使用gif图简单方便,还能节省加载时间和空间.下面介绍 ...

  7. windows 下 安装 RabbitMQ

    RabbitMQ是一个在AMQP协议标准基础上完整的.可复用的企业消息系统.它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器.它扮演 ...

  8. Oracle数据库安装教程

    一.准备文件 Oracle安装程序(64位)下载地址: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_ ...

  9. linux root用户下没有.ssh目录

    .ssh 是记录密码信息的文件夹,如果没有登录过root的话,就没有 .ssh 文件夹,因此登录 localhost ,并输入密码就会生成了 ssh localhost

  10. (转)@Autowired(required=false)注入注意的问题

    1.前言 在使用spring开发过程中,我们基本上都是使用@Autowired这个注解,用来注入已有的bean.但是有些时候,会注入失败.当我们加上参数(required=false)就能解决.今天整 ...