行列A
(Mx2)と行列B
(Nx2)があり、M>=Nです。AとBの類似性をテストするには、垂直ユークリッド距離を計算する必要があります。画像を参照すると、単一のユークリッド距離は、各piとp'iの間のセグメントであり、単一の垂直距離ごとに計算されると、平均または合計して単一のパラメーターを取得します。これを行うmatlabルーチンまたはそのようなスクリプトを知っていますか?
質問する
3631 次
2 に答える
2
p1 .. p4 が p0 と p5 の間にあることがわかっている場合、三角形の面積を使用して垂直距離を簡単に計算できます。
d(p0p5, p1) = 2 * area(p0p1p5) / norm(p5-p0)
三角形の面積は
area(p0p1p5) = sqrt(s * (s-norm(p0-p1)) * (s-norm(p1-p5)) * (s-norm(p5-p0)))
どこ
s = (norm(p0-p1) + norm(p1-p5) + norm(p5-p0)) / 2
射影とピタゴラスの定理に内積を使用すると、パフォーマンスが向上すると思います。
d(p0p5, p1) = sqrt(norm(p1-p0)^2 - dot(p1-p0,p5-p0)^2/norm(p5-p0)^2)
どちらの場合でも、コスト関数に平均二乗誤差が含まれる場合は、sqrt
代わりに二乗誤差を評価するだけで呼び出しを排除できます。ノルム二乗は、呼び出してから二乗するよりも計算が安価norm
です (代わりに内積を使用します)。
于 2012-04-29T23:28:46.293 に答える
1
dist
Neural Network Toolbox から使用できます。
A
nx 2 行列でB
あるため、これは距離の合計を計算する 1 つの可能な方法です (疑似コード): sum(sqrt((A_1x - B_1x)^2 + (A_1y - B_1y)^2), ..., sqrt( (A_nx - B_nx)^2 + (A_ny - B_ny)^2)、または: sum(p1-p'1, ..., pn-p'n)。
これらの各行列 (A
およびB
) は、2D 空間 (この例では n = 3) の n 点の x 座標と y 座標を保持します。
% Some example matrices, size 3 x 2.
A = [ 10 22; 35 48; 16 42 ];
B = [ 5 7; 8 11; 33 22 ];
DistanceMatrix = dist([A' B']);
DistanceMatrix(1:size(A,1),:) = [];
SumOfDistances = sum(diag(DistanceMatrix));
SumOfDistances =
87.8641
于 2012-04-29T22:29:43.193 に答える