我有两组,每组包含一系列点和代码的x,y坐标。
考虑到文件的大小,我正在寻找Matlab中的优化方法,将第一组中的每个点与第二组中的点相连接,该点是基于坐标值帮助计算的Eucledian距离最近的点。
X Y
A=[155413 4564566; 156464 456585; ... ; n]
code X Y
B=[1001 155413 4564566; 1015 156464 456585; ... ; m]
棘手的部分是它们的长度不同。对于每个点(来自A的行),我需要从B找到相应的“代码”变量作为最接近的。
感谢。
答案 0 :(得分: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
这需要两个复杂的数组AA
和BB
,大小为numA次numB,其中numA和numB表示A和B点的数量。如果它们对于您的计算机内存而言太大,则您需要for
循环将A划分为可接受大小的块。