Python曲线拟合.变量间条件优化put函数模型

Python曲线拟合.变量间条件优化put函数模型,python,curve-fitting,scipy-optimize,Python,Curve Fitting,Scipy Optimize,我有这样一个函数: 我使用曲线拟合来拟合我的数据。。。。编写了以下代码: import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit db = pd.read_excel("/Users/piero/Desktop/lavori/AIF/test.xlsx") M0=np.array(db['M0']) t_time=np.array(db['time']) def

我有这样一个函数:

我使用曲线拟合来拟合我的数据。。。。编写了以下代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit


db = pd.read_excel("/Users/piero/Desktop/lavori/AIF/test.xlsx")


M0=np.array(db['M0'])
t_time=np.array(db['time'])


def func(t, K, t0, a, b):
            if t > t0 :
                f = K * ((t-t0)**a) * np.exp(-(t-t0)/b)
                return f
            return 0

params_guess=[2,3,4,1]
popt,pcov= curve_fit(func,t_time,M0,p0=params_guess) 
我发现了这个错误

ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()


所以我知道在我的函数func中,我不能比较一个数组和一个数字,但我需要把t>t0条件放在我的fit中。有人知道怎么做吗?

您想评估您在数组
t
的每个元素中写入的条件。使用整个数组调用该函数,称为
t
,该数组可能跨越点
t0
。在Numpy中,可以通过多种方式执行此类条件求值,但最简单的是:

定义函数(t,K,t0,a,b): 返回np.where(t>t0,K*(t-t0)**a*np.exp(-(t-t0)/b),0.0) 这应该理解为:“在条件
t>t0为真的数组索引处,从第一个表达式返回值,在其他值处返回0.0。”