2

行列A(Mx2)と行列B(Nx2)があり、M>=Nです。AとBの類似性をテストするには、垂直ユークリッド距離を計算する必要があります。画像を参照すると、単一のユークリッド距離は、各piとp'iの間のセグメントであり、単一の垂直距離ごとに計算されると、平均または合計して単一のパラメーターを取得します。これを行うmatlabルーチンまたはそのようなスクリプトを知っていますか? ここに画像の説明を入力してください

4

2 に答える 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

distNeural Network Toolbox から使用できます。

Anx 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 に答える