for循环中的Python curvefit

2024-09-26 18:01:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的线性回归模型,我使用python曲线拟合找到系数,如下所示:

import numpy as np
from scipy.optimize import curve_fit

def line(x,m,c):     #linear fit function in order to get the slope
    return m*x + c

x = np.array([2005.38,2005.46,2017.39])
y = np.array([631137.78, 631137.88, 631138.12])

popt, pcov = curve_fit(line,x,y)

slope = popt[0]
intercept = popt[1]
perr = np.sqrt(np.diag(pcov)) 
slope_err = perr[0]
intercept_err = perr_RA[1]

然后,我在先前的基础上进行了蒙特卡罗模拟,生成了大约1000个类似的y阵列,如下所示,但是我的x阵列应该保持不变。因此,对于所有MC生成的y阵列,相同的x阵列:

y = np.array([631137.97960858, 631137.97958298, 631137.97544918]),
 array([631138.00349615, 631138.00462398, 631138.18676081]),
 array([631137.83121579, 631137.83457397, 631138.37689362]),
 array([631138.03276579, 631138.03322997, 631138.10819225]),
 array([631137.79168171, 631137.79288829, 631137.98774176])]

现在,我想执行与上面所示相同的计算并获得系数,但是,当我将它们放入for循环时,它不能正确计算系数

nsims = 1000

y = []
slope_mc = []
int_mc = []
for i in range(nsims):
    m = models[i]
    y.append(m[:,0])
    popt, pcov = curve_fit(line,x,m[:,0])
    slope = popt[0]
    intercept = popt[1]
    slope_mc.append(slope)
    int_mc.append(intercept)

我收到一个错误声明

OptimizeWarning: Covariance of the parameters could not be estimated
  category=OptimizeWarning)

我已经研究过类似的解决方案,但它并没有解决我的问题。还有没有一种不使用for循环的更简单/更快的方法?谢谢你的帮助


Tags: importfornplinemcarrayslopefit

热门问题