次のコードを使用して3Dポイントのクラウドに3Dラインをフィットさせています。 最小二乗法を使用して、lmfitを最小化しています。lmfitを使用してポイントの雲に3Dラインをフィットさせる場合のウェイトの追加
私はが異なる点に重みを追加する必要がありますが、配列(およびないスカラー)の出力を距離を使用するときにどのように行うのか分かりません。スカラーを使用するときの問題は、配列を使用するときほど良くないことです。私はより多くの変数のために仮定します。
質問がありますか?アレイの各要素の重みを最小化装置に追加する方法はありますか? Nelder w/scaral入力のようなものを使用しても3Dフィットはうまく実行されません。
from lmfit import minimize, Parameters, Parameter,report_fit,fit_report, Minimizer, printfuncs
import numpy as np
#parameters
params = Parameters()
params.add('y1', value= 0)
params.add('x0', value= 129)
params.add('x1', value= 0)
params.add('y0', value= 129)
params.add('y1', value= 0)
#function calculating point-line distance
def fun(params,x,y,z):
x0 = params['x0'].value; x1 = params['x1'].value; y0 = params['y0'].value; y1 = params['y1'].value
distance = []
#parametric equations
v0 = np.array([x0, y0, 0])
v1 = np.array([x0+x1,y0+ y1, 1])
#for loop over all the 3D points to calculate distance
for point in range(len(x)):
p = np.array([x[point], y[point], z[point]])
distance.append(np.linalg.norm(np.cross(v0-p,v0-v1)))
return distance
result = minimize(fun, params,args=(x,y,z))
print(fit_report(result))
theta = np.arccos(1/ np.sqrt(result.params['x1']*result.params['x1']+result.params['y1']*result.params['y1']+1))
私は重みのリストを追加したいが、データの統計的不確実性は使用しない。 スカラーの場合は簡単です。しかし、ここで私の問題は、スカラーと配列を使用しても同じ結果が得られないということです。 – Iroxk
あなたは重みのリストを追加するだけでよいでしょう。その場合、epsはちょうど1 /重みにすべきです。スカラーや配列を使用しても、両方のシナリオの出力を最小限に抑えた例と同じ結果が得られないのは、あなたの質問からは明らかではありません。 – Renee
基本的に私は体重の1次元配列を持っている場合、私は単純に楽しい関数距離X重み配列から出力することができますか? epsを使用する必要はありませんか? – Iroxk