问题


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

解决


写一个类

 # -*- 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. 【LeetCode/LintCode】 题解丨微软面试题:大楼轮廓

    水平面上有 N 座大楼,每座大楼都是矩阵的形状,可以用一个三元组表示 (start, end, height),分别代表其在x轴上的起点,终点和高度.大楼之间从远处看可能会重叠,求出 N 座大楼的外轮 ...

  2. ngnix.conf的配置结构

    1.ngnix.conf的配置结构 2.部分配置文件说明 #worker进程可操作的用户 #user nobody; #设置worker的个数 worker_processes 1; #错误日志 #e ...

  3. C#LeetCode刷题之#884-两句话中的不常见单词(Uncommon Words from Two Sentences)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3816 访问. 给定两个句子 A 和 B . (句子是一串由空格分 ...

  4. speedtest测速网站测速节点添加流程

    一.准备一台服务器: 系统需求:常见Linux系统: 二.服务器入网(确保可以访问互联网): 三.ssh登录到服务器安装speedtest守护程序程序包: 安装和启动,执行以下命令: curl -O ...

  5. 利用BeautifulSoup去除HTML指定标签和去除注释

    去除指定标签 from bs4 import BeautifulSoup #去除属性ul [s.extract() for s in soup("ul")] # 去除属性svg [ ...

  6. Js~对键值对操作

    键值对主要是面向对象语言里的字典,或者叫哈希表,它通过键(key)可以直接访问到值(value),所以它查找的时间复杂度是O(1),即一次查找即可找到目标:在.net里有Dictionary,而在ja ...

  7. day2 变量

    变量是在程序中表现为不重复的名字,只需定义一个名字,给这个名字变量赋值即可  作用  在内存中开辟一块空间.起了一个别名,用了访问和存储空间中的数据 在编写 Python 程序过程中, 经常需要给标识 ...

  8. Java并发-Synchronized关键字

    一.多线程下的i++操作的并发问题 package passtra; public class SynchronizedDemo implements Runnable{ private static ...

  9. error PRJ0003 : 生成“cmd.exe”时出错 2010-01-19 22:26

    今天用vs2005编译时代码时竟然出现了error PRJ0003 : 生成“cmd.exe”时出错这样的错误,这不是刺激我吗,我们先看msdn的解释吧. 错误消息 生成“command line”时 ...

  10. Socket原理及实践(Java/C/C++)

    原理 基本概念 什么是TCP/IP.UDP? 详细的可以看一下这个:学习计算机网络知识只要一篇就够了! TCP/IP(Transmission Control Protocol/Internet Pr ...