python应用 曲线拟合03
问题
有许多待拟合的曲线,需批量拟合。
解决
写一个类
# -*- 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的更多相关文章
- Python web前端 03 CSS属性
Python web前端 03 CSS属性 一.文字.文本属性 1.文字属性 font-family #字体类型浏览器默认的字体是微软雅黑,字体中有多个字体的时候,如果前面的字体没有就使用后面的字体 ...
- Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- python应用 曲线拟合04
python应用 曲线拟合04 → 多项式拟合 主要是使用 numpy 库中的 polyfit() 函数,见第 66 行, z = np.polyfit(x_proton, y, 3) ,其中待拟合曲 ...
- Python学习总结 03 Plotly 学习总结
一 Plotly 简介 Plotly是另一个免费进行数据分析和绘制图表的APP,建立在d3.js上. Plotly图可下载为SVG,EPS或PNG格式,并简单地导入到Illustrator或者Phot ...
- python学习总结03
1.开启虚拟技术 1.1 安装virtualenv 1.1.1 在python环境中运行pip install virtualenv 出现如下信息表示安装成功 1.1.2 进入python的Scrip ...
- Python标准库03 路径与文件 (os.path包, glob包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 路径与文件的简介请参看Linux文件系统 os.path包 os.path包主要是 ...
- Python快速学习03:运算 & 缩进和选择
前言 系列文章:[传送门] 这篇昨晚本来要出的,去搭了帐篷,在学校的屋顶上. 运算 运算,不得不说的是运算符. 数学 +, -, *, /, **, %,// 判断 ==, !=, >, > ...
- Python Revisited Day 03 (组合数据类型)
目录 第三章 组合数据类型 3.1 序列类型 3.1.1 元组 3.1.2 命名的元组 (collections.nametuple()) 3.1.3 列表 (查询有关函数点这) 3.1.4 列表内涵 ...
随机推荐
- C#LeetCode刷题之#507-完美数(Perfect Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3879 访问. 对于一个 正整数,如果它和除了它自身以外的所有正因 ...
- Vue Slots
子组件vue <template> <div> <slot v-if="slots.header" name="header"&g ...
- .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。
介绍: 目前微软还没有跨平台桌面程序的开发框架.github上有一个团队开始自行研发跨平台桌面框架,其中一款叫avalonia.avalonia 采用 Xaml+C#,类似于wpf,可运行于.netf ...
- Android 内部存储读写介绍
内部存储读写 内容介绍 Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在Linux系统下的/data/data//files目录中 Android系统不仅支 ...
- github渗透测试工具库
本文作者:Yunying 原文链接:https://www.cnblogs.com/BOHB-yunying/p/11856178.html 导航: 2.漏洞练习平台 WebGoat漏洞练习平台: h ...
- 一线大厂工程师推荐:Mysql、Springboot、JVM、Spring等面试合集
前两天晚上,正当我加班沉浸在敲代码的快乐中时,听到前桌的同事在嘀咕:Spring究竟是如何解决的循环依赖? 这让我想起最开始学Java的时候,掌握了一点基本语法和面向对象的一点皮毛.当时心里也是各种想 ...
- CentOS7 更改默认启动桌面(或命令行)模式
centos7以后是这样的,7以前就是别的版本了 1.systemctl get-default命令获取当前模式 2.systemctl set-default graphical.target 修改 ...
- 手把手教Linux驱动3-之字符设备架构详解,有这篇就够了
一.Linux设备分类 Linux系统为了管理方便,将设备分成三种基本类型: 字符设备 块设备 网络设备 字符设备: 字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程 ...
- 记一次因为Gradle与Lombok不兼容导致编译时的内存溢出 Expiring Daemon because JVM heap space is exhausted
1.现象 版本 Gradel:6.1.1 / 6.5.1 Lombok:1.8.6 / 1.8.10 截图 解决过程 调大idea的堆内存 不行 × idea安装目录中找到 idea64.exe.vm ...
- 计算机网络-网络层(3)DHCP协议
主机获得IP地址,除了可以通过静态配置,还可以通过动态主机配置协议DHCP: Dynamic Host Configuration Protocol从服务器动态获取IP地址.子网掩码.默认网关地址.D ...