这里的问题是曲线拟合期望你优化的函数取一个输入向量,然后返回一个输出向量。一个输入的高斯函数数字阵列)但不管怎样,它都返回一个标量输出。曲线拟合函数则无法找到良好的最佳拟合。在
为了澄清到底发生了什么,在使用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,它聚合了数字阵列对一个数字阵列. 在