【问题标题】:python fitting using scipy.optimizepython拟合使用scipy.optimize
【发布时间】:2013-07-31 19:52:27
【问题描述】:

我有以下数据集

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])

我想使用来自scipyoptimize.leastsq() 对这些数据进行高斯拟合,但遇到了一个绊脚石。这是我从here 尝试的内容

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))

但是我收到错误消息

TypeError: only length-1 arrays can be converted to Python scalars

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

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如 Janne 所说,它需要能够支持一个大的多维“x”作为自变量——它实际上是它们的矩阵,昨天我花了很多时间才发现。因此,它需要完全向量化,因此您必须使用 np.exp 以允许矩阵的 元素 的指数;不是矩阵的幂。参数允许占用'm'个空格,但在你传递的函数中,自变量只能占用一个

      我讨厌这样做,但昨天有人问了一个类似的问题,如果你有兴趣,我写了一个相当深入的回复:

      Curve fitting in Scipy with 3d data and parameters

      【讨论】:

        猜你喜欢
        • 2018-11-04
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2015-11-22
        • 2021-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多