私は、データのセットに最適なポイントを見つける方法としてscipy.leastsq()を使用しようとしています。 scipyライブラリに慣れていないので、leastsq関数はデータの集合全体を一度に計算するという印象を受けますが、データポイントをスカラとして取っているように見えるので、同時に問題があります。SciPy LeastSq - スカラ問題への配列
私の目標は、結果を一連のサークルとの最小距離を持つ点(x、y)という2つの値のセットとして取得することです。この値は、xの形式でleastsq関数にも与えられます、y、半径)。 leastsq関数の前半の数学は、推測に最も近い各円上の点を見つけ、その点からその点までの距離を取得します。 (、半径は既に配列に値がロードされているXI、YI)leastsq機能へ
コール
#Now that we have the center, we can do least squares
#generate point guess starting at avg of circles
ptGuess = np.array([avgX,avgY])
point, cov,info,mesg, ier = optimize.leastsq(calcResiduals, ptGuess, args = (xi,yi,radii))
とcalcResiduals():
def calcResiduals(ptGuess, xi, yi, radii):
#extract x and y from guess point
xg = ptGuess[0]
yg = ptGuess[1]
#slope of the line from (xi,yi) to guess (xg,yg)
m = (yg - yi)/(xg - xi)
#Go along the line for the distance of c to get coordinates
deltax = radii/math.sqrt(1+m**2)
if (xi > xg):
xii = xi + deltax
else:
xii = xi - deltax
yii = m*(xii-xi) + yi
#residuals is distance from (xii,yii) to (xg, yg)
return (xii-xg)**2 + (yii-yg)**2
私が手にエラーがほのめかしているようです配列を乗算のスカラー値に変換する際の問題ではありますが、なぜその行はまだ動作しないのか分かりません。
エラー:
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