python曲线拟合为什么会失败_python曲线拟合似乎无法拟合高斯和

本文探讨了在Python中进行曲线拟合时遇到的问题,特别是当函数返回值应为向量而非标量时。通过示例代码展示了如何使用numpy和scipy.optimize.curve_fit正确地实现高斯函数的曲线拟合。问题在于隐式调用了numpy的数字总和,而应使用python内置的sum函数。提供了一个工作示例,强调了在使用外部库时明确命名空间的重要性。
摘要由CSDN通过智能技术生成

这里的问题是曲线拟合期望你优化的函数取一个输入向量,然后返回一个输出向量。一个输入的高斯函数数字阵列)但不管怎样,它都返回一个标量输出。曲线拟合函数则无法找到良好的最佳拟合。在

为了澄清到底发生了什么,在使用numpy(或任何外部库)时总是建议始终显式地使用命名空间,如以下工作版本所示:import numpy

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

def GaussSum(x,*p):

n=len(p)/3

A=p[:n]

w=p[n:2*n]

c=p[2*n:3*n]

y = sum([ A[i]*numpy.exp(-(x-c[i])**2./(2.*(w[i])**2.))/(2*numpy.pi*w[i]**2)**0.5 for i in range(n)])

return y

params = [1.,1.,-3.]; #parameters for a single gaussian

#params=[1.,1.,1.,2.,-3.,0.]; #parameters for the sum of two gaussians

xdata=numpy.arange(-6,6,0.01)

ydata = numpy.array([GaussSum(x,*params) for x in xdata])

popt,pcov = curve_fit(GaussSum,xdata,ydata,p0=params)

特别是你暗地里打电话来数字总和,这将聚合数字阵列并返回单个值,而您需要使用内置的python sum,它聚合了数字阵列对一个数字阵列. 在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值