1

我有两组,每组分别包含一系列点和代码的 x,y 坐标。

考虑到文件的巨大大小,我正在Matlab中寻找一种优化的方法,将第一组中的每个点与第二组中的点连接起来,该点是基于在坐标值的帮助下计算的欧几里德距离最近的。

    X        Y

A=[155413 4564566; 156464 456585; ... ; n]


   code   X       Y
B=[1001 155413 4564566; 1015 156464 456585; ... ; m]

棘手的部分是它们的长度不同。对于每个点(来自 A 的线),我需要来自 B 的相应“代码”变量,因为它是最接近的。

谢谢。

4

1 回答 1

1

由于有两个坐标,因此可以使用基于复数的方法,从而得到一个非常简单的解决方案:

A = [1 2; 3 4; 5 6; 7 8; 9 10]; % GPS points
B = [1001 0 0; 1002 7 7]; % postcode points

A_compl = A(:,1) + j*A(:,2); % transform to complex
B_compl = B(:,2) + j*B(:,3);
[AA BB] = meshgrid(A_compl, B_compl); % generate all combinations
distance = abs(AA-BB); % Euclicean distance in R^2 is modulus in C
[min_distance min_index] = min(distance);
code = B(min_index,1) % solution

这需要两个复数数组AABB,大小为 numA 乘以 numB,其中 numA 和 numB 表示 A 点和 B 点的数量。如果它们对于您的计算机内存来说太大了,您将需要一个for循环将 A 分成可接受大小的块。

于 2013-07-25T10:39:24.833 回答