Python-根据记录值拟合指数衰减曲线

Python-根据记录值拟合指数衰减曲线,python,numpy,matplotlib,scipy,curve-fitting,Python,Numpy,Matplotlib,Scipy,Curve Fitting,我知道有一些线程与此相关,但我不知道我想在哪里将数据拟合 我的数据被导入并按此方式打印 import matplotlib.pyplot as plt %matplotlib inline import pylab as plb import numpy as np import scipy as sp import csv FreqTime1 = [] DecayCount1 = [] with open('Half_Life.csv', 'r') as f: reader = cs

我知道有一些线程与此相关,但我不知道我想在哪里将数据拟合

我的数据被导入并按此方式打印

import matplotlib.pyplot as plt
%matplotlib inline
import pylab as plb
import numpy as np
import scipy as sp
import csv

FreqTime1 = []
DecayCount1 = []
with open('Half_Life.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        FreqTime1.append(row[0])
        DecayCount1.append(row[3])

FreqTime1 = np.array(FreqTime1) 
DecayCount1 = np.array(DecayCount1)

fig1 = plt.figure(figsize=(15,6))
ax1 = fig1.add_subplot(111)
ax1.plot(FreqTime1,DecayCount1, ".", label = 'Run 1')
ax1.set_xlabel('Time (sec)')
ax1.set_ylabel('Count')
plt.legend()

问题是,我很难设置一般的指数衰减,我不确定如何从数据集中计算参数值

如果可能的话,我想让拟合的衰变方程的方程与图表一起显示。但是,如果能够产生合适的效果,那么这种方法很容易应用

编辑-------------------------------------------------------------

所以当使用Stanely R提到的拟合函数时

def model_func(x, a, k, b):
    return a * np.exp(-k*x) + b

x = FreqTime1
y = DecayCount1


p0 = (1.,1.e-5,1.) 
opt, pcov = curve_fit(model_func, x, y, p0)
a, k, b = opt
返回了此错误消息

TypeError:ufunc'multiply'不包含签名类型与dtype('S32')dtype('S32')dtype('S32')dtype('S32')匹配的循环。


关于如何解决这个问题,你有什么想法吗?

你必须使用scipy.optimize的
曲线拟合

“返回此错误消息

有没有办法解决这个问题?”

读取CSV文件以创建
FreqTime1
DelayCount1
的代码正在创建字符串数组。你可以按照@StanleyR在评论中提出的建议来解决这个问题。更好的办法是替换此代码:

FreqTime1 = []
DecayCount1 = []
with open('Half_Life.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        FreqTime1.append(row[0])
        DecayCount1.append(row[3])

FreqTime1 = np.array(FreqTime1) 
DecayCount1 = np.array(DecayCount1)
与:


酷。在这种情况下,我需要为我的数据集应用For循环吗?什么循环
curve_fit
搜索了合适的fit函数。当我将x和y值定义为数组时,返回的结果是,
ufunc'multiply'不包含签名匹配类型dtype('S32')dtype('S32')dtype('S32')的循环。
尝试写入
FreqTime1.append(np.float32(行[0]);DecayCount1.append(np.float32(第[3]行))
查看
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('S32') dtype('S32') dtype('S32')
FreqTime1 = []
DecayCount1 = []
with open('Half_Life.csv', 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        FreqTime1.append(row[0])
        DecayCount1.append(row[3])

FreqTime1 = np.array(FreqTime1) 
DecayCount1 = np.array(DecayCount1)
FreqTime1, DecayCount1 = np.loadtxt('Half_Life.csv', delimiter=',', usecols=(0, 3), unpack=True)