python拟合使用scipy.optimize

时间:2013-07-30 10:07:20

标签: python numpy scipy

我有以下数据集

angles =np.arange(-90,91,15)
n_col_cnts =([ 0.08692008,0.46557143,0.7282595,0.89681908,0.97057961,1.,0.99488705,0.91823478,0.84187586,  0.73110934,0.53363229,0.25338418,0.01328528])

我想使用来自optimize.leastsq()的{​​{1}}来对这些数据进行高斯拟合,但已达到绊脚石。以下是我从here

尝试的内容
scipy

但是我收到错误消息

fitfunc = lambda p, x: p[0]*math.exp(-((x-p[1])/p[2])**2) #Target function errfunc = lambda p, x, y: fitfunc(p, x) - y # Distance to the target function p0 = [1., 0., 30.] # Initial guess for the parameters fit, success = optimize.leastsq(errfunc, p0[:], args=(angles,n_col_cnts))

我不明白。我做错了什么?

2 个答案:

答案 0 :(得分:4)

我认为fitfunc需要使用数组。将math.exp更改为np.exp

答案 1 :(得分:1)

正如Janne所说,它需要能够支持一个大的多维'x'作为自变量 - 它实际上是它们的矩阵,这让我在昨天找到了很多东西。因此,它需要完全矢量化,因此您必须使用np.exp才能允许矩阵的元素的指数;不是权力的矩阵。允许参数占用“m”个空格,但在传递的函数中,自变量只能占用一个

我讨厌这样做,但昨天有人问过类似的问题,如果你有兴趣,我会写一篇非常深入的回复:

Curve fitting in Scipy with 3d data and parameters