Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Matlab从两个不同大小的集合中找到最近点?_Matlab_Optimization_Coordinates - Fatal编程技术网

如何用Matlab从两个不同大小的集合中找到最近点?

如何用Matlab从两个不同大小的集合中找到最近点?,matlab,optimization,coordinates,Matlab,Optimization,Coordinates,我有两个集合,每个集合分别包含一系列点和代码的x,y坐标 考虑到文件的巨大规模,我正在寻找一种在Matlab中优化的方法,将第一个集合中的每个点与第二个集合中的点连接起来,第二个集合中的点是根据坐标值计算的欧氏距离最近的 X Y A=[155413 4564566; 156464 456585; ... ; n] code X Y B=[1001 155413 4564566; 1015 156464 456585; ... ; m] 棘手的是

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

考虑到文件的巨大规模,我正在寻找一种在Matlab中优化的方法,将第一个集合中的每个点与第二个集合中的点连接起来,第二个集合中的点是根据坐标值计算的欧氏距离最近的

    X        Y

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


   code   X       Y
B=[1001 155413 4564566; 1015 156464 456585; ... ; m]
棘手的是它们的长度不同。对于每个点(A中的线),我需要B中相应的“code”变量作为最接近的变量


谢谢。

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

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点的数量。如果它们对于计算机内存来说太大,则需要一个
循环来将a划分为可接受大小的块。

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

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点的数量。如果它们对于计算机内存来说太大,您将需要一个
循环来将一个循环划分为可接受大小的块。

只是一个建议,但您不知道更多关于您的数据,但您可以尝试一些涉及两个集合的凸包的东西,如果它们形成不相交的集合。请参见我的答案:我的适用于x,y,z,因此,您可能需要将
3
s中的一些更改为
2
s(但不是全部),这只是一个建议,而不需要更多地了解您的数据,但如果这两个集合形成不相交的集合,您可以尝试使用这两个集合的凸包。请参见我的答案:我的适用于x,y,z,因此,您可能需要将部分
3
s更改为
2
s(但不是全部)嗨!谢谢这是一个优雅的解决方案,但我遇到了内存问题。最后,我只使用坐标数组作为knnsearch函数的输入。非常方便!:)欢迎无论如何,内存问题可以通过AHi上的for循环解决!谢谢这是一个优雅的解决方案,但我遇到了内存问题。最后,我只使用坐标数组作为knnsearch函数的输入。非常方便!:)欢迎无论如何,内存问题可以通过一个for循环解决