2

我有一个矩阵A(Mx2)和矩阵B(Nx2),M>=N。我必须计算垂直欧式距离来测试 A 和 B 之间的相似性。参考图像,单个欧式距离是每个 pi 和 p'i 之间的段,一旦计算了每个垂直距离,我就可以计算平均值或sum 得到一个参数。您知道执行此操作的 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

您可以dist从神经网络工具箱中使用。

A并且B是 nx 2 矩阵,这是计算距离总和的一种可能方法(伪代码): 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)。

这些矩阵 (AB) 中的每一个都保存 2D 空间中 n 个点的 x 和 y 坐标(在本例中 n = 3)。

% 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 回答