Python SciPy LeastSq-数组到标量问题

Python SciPy LeastSq-数组到标量问题,python,scipy,Python,Scipy,我试图使用scipy.leastsq()作为一种方法来寻找一组数据的最佳拟合点。不熟悉scipy库,我得到的印象是leastsq函数一次对整个数据集进行数学运算,但同时我遇到了问题,因为它似乎将一些数据点作为标量 我的目标是将结果作为两个值的集合得到-即一个点(x,y),与一系列圆的最小距离,也以(x,y,半径)的形式提供给leastsq函数。leastsq函数前半部分中的数学运算会找到每个圆上最接近猜测的点,然后获得猜测到该点的距离 调用leastsq函数(xi、yi、radii已将值加载到数

我试图使用scipy.leastsq()作为一种方法来寻找一组数据的最佳拟合点。不熟悉scipy库,我得到的印象是leastsq函数一次对整个数据集进行数学运算,但同时我遇到了问题,因为它似乎将一些数据点作为标量

我的目标是将结果作为两个值的集合得到-即一个点(x,y),与一系列圆的最小距离,也以(x,y,半径)的形式提供给leastsq函数。leastsq函数前半部分中的数学运算会找到每个圆上最接近猜测的点,然后获得猜测到该点的距离

调用leastsq函数(xi、yi、radii已将值加载到数组中)

和Calcresiders()

我得到的错误似乎暗示了将数组转换为标量值进行乘法的问题,但我不知道为什么这一行还不能工作,而前一行可以

错误:

File "listener.py", line 62, in calcAPLocation
point, cov,info,mesg, ier = optimize.leastsq(calcResiduals, ptGuess, args = (xi,yi,radii))
File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 276, in leastsq
m = _check_func('leastsq', 'func', func, x0, args, n)[0]
File "/usr/lib/python2.7/dist-packages/scipy/optimize/minpack.py", line 13, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "listener.py", line 76, in calcResiduals
deltax = radii / math.sqrt(1+m**2)
TypeError: only length-1 arrays can be converted to Python scalars

如果你的代码中的席和彝是点数组,那么M应该是长度相等的数组。 致len(xi)。函数math.sqrt需要长度为1或标量的数组才能工作

前一行:

m = (yg - yi) / (xg - xi)
之所以有效,是因为您要划分为相同长度的数组

此线路出现故障:

deltax = radii / math.sqrt(1+m**2)
因为m是一个包含许多项的数组,而python数学库不知道如何处理它。您可以尝试将math.sqrt更改为numpy.sqrt以获取每个变量的平方根 以m。我想这就是你想要的。将上面的行更改为

deltaX = radii/np.sqrt(1 + m**2)
deltax = radii / math.sqrt(1+m**2)
deltaX = radii/np.sqrt(1 + m**2)