问题


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

解决


写一个类

 # -*- 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. CSS 定位总结

    目录 元素显示模式 元素模式 元素显示模式转换 CSS定位机制 静态定位static 相对定位relative 绝对定位absolute 固定定位fixed 粘性定位sticky 定位小结一图流 CS ...

  2. C#LeetCode刷题之#441-排列硬币(Arranging Coins)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3995 访问. 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状 ...

  3. C#LeetCode刷题之#118-杨辉三角(Pascal‘s Triangle)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3688 访问. 给定一个非负整数 numRows,生成杨辉三角的前 ...

  4. 用它5分钟以后,我放弃用了四年的 Flask

    有一个非常简单的需求:编写一个 HTTP接口,使用 POST 方式发送一个 JSON 字符串,接口里面读取发送上来的参数,对其中某个参数进行处理,并返回. 如果我们使用 Flask 来开发这个接口,那 ...

  5. CODING DevOps 微服务项目实战系列第一课,明天等你

    CODING DevOps 微服务项目实战系列第一课<DevOps 微服务项目实战:DevOps 初体验>将由 CODING DevOps 开发工程师 王宽老师 向大家介绍 DevOps ...

  6. linux驱动之内核多线程(二)

    本文摘自http://www.cnblogs.com/zhuyp1015/archive/2012/06/11/2545702.html 内核多线程是在项目中使用到,自己也不熟悉,遇到一个很囧的问题, ...

  7. 如何在Linux上使用xargs命令

    大家好,我是良许. 在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令.xargs 可以将一个命令的输出 ...

  8. source insight编辑matlab,不可

    先说结论,我用的source insight版本是4.0x,matlab的语言包用的sourceinght官网提供的matlab.clf.链接如下:https://www.sourceinsight. ...

  9. 百度官方给出的seo优化策略

    http://www.wocaoseo.com/thread-157-1-1.html 因为要参加seo工程师考试了,这两天一直在学习seo的基础理论,昨天也写了备战seo工程师考试的文章,说实在话, ...

  10. PyQt5+Caffe+Opencv搭建人脸识别登录界面

    PyQt5+Caffe+Opencv搭建人脸识别登录界面(转载) 最近开始学习Qt,结合之前学习过的caffe一起搭建了一个人脸识别登录系统的程序,新手可能有理解不到位的情况,还请大家多多指教. 我的 ...