问题


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

解决


写一个类

 # -*- 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. java 模拟斗地主发牌洗牌

    一 模拟斗地主洗牌发牌 1.案例需求 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张 ...

  2. C#算法设计查找篇之02-二分查找

    二分查找(Binary Search) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/699 访问. 二分查找也称折半查 ...

  3. 「MoreThanJava」Day 7:接口详解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  4. python 3.7 jupyter中安装 docx报错

    from docx import Document报错: Import Error: No module named ‘exceptions‘ 解决办法: 使用下面的命令重新安装docx !pip i ...

  5. python3 - selenium常用的参数

    # 选用开发者模式,创建一个浏览器对象,可避免被检测到是selenium模拟浏览器 chrome_options = webdriver.ChromeOptions() chrome_options ...

  6. 【转】Ubuntu下解决Depends: xxx(< 1.2.1) but xxx is to be installed

    在ubuntu下由于更新package不成功,或者误删除了一些文件会出现Depends: xxx(< 1.2.1) but xxx is to be installed解决方法是先试着安装所缺的 ...

  7. 微服务项目整合Ocelot+IdentityServer4

    项目搭建肯定少不了认证和授权,传统的单体应用基于cookie和session来完成的. 因为http请求是无状态的,每个请求都是完全独立的,服务端无法确认当前请求之前是否登陆过.所以第一次请求(登录) ...

  8. CentOS基础操作

    一.修改IP地址 vim  ../etc/sysconfig/network-scripts/ifcfg-ens33 在文件中修改或添加以下内容 TYPE=Ethernet PROXY_METHOD= ...

  9. 3D渲染集群,你了解多少?

    摘要:渲染是批处理运行模式,那能不能使用Docker容器技术,做大规模的渲染集群呢? 我们先说说3D渲染涉及哪些领域: 1.什么是3D渲染 简单粗暴的讲:就是将虚拟世界里的3D模型,变为(人眼看到)平 ...

  10. ent orm笔记2---schema使用(下)

    Indexes 索引 在前两篇的文章中,其实对于索引也有一些使用, 这里来详细看一下关于索引的使用 Indexes方法可以在一个或者多个字段上设置索引,以提高数据检索的速度或者定义数据的唯一性 在下面 ...