在MATLAB中找到距单个点最近的邻居

时间:2019-02-25 16:45:10

标签: matlab latitude-longitude nearest-neighbor

我正在尝试进行最接近的邻居搜索,该搜索会产生一个点,作为与Matlab中另一个点的单个“最近邻居”。

我有以下数据:

  1. 尺寸为336x264“ lon”的经度网格
  2. 经度网格“ dxf”范围内的一些随机点

我尝试使用MATLAB的“ knnsearch”功能

https://www.mathworks.com/help/stats/knnsearch.html

可惜的是,当我使用命令时:

idx = knnsearch(lon, dxf)

我遇到错误:

"Y must be a matrix with 264 columns."

是否可以使用替代最近邻搜索来查找MATLAB中单个点的最近邻?我可以实现一个更简单的解决方案吗?

我实际上只是想在“ lon”矩阵内找到最接近“ dxf”的点。

谢谢! 泰勒

2 个答案:

答案 0 :(得分:1)

您应该首先将网格转换为n-by-2矩阵(如果您是使用meshgrid创建的,则简称为G = [XX(:) YY(:)]),如果您有{ {3}}(您要这样做):

[D,I] = pdist2(P, G, 'euclidian', 'Smallest', 1);

其中G是网格,P是您的m-by-2测试点数组。

答案 1 :(得分:0)

如果您不使用工具箱,则可以自己构造一个简单的距离公式:

xx = [0:364];  % Not sure what your limits were so just making some up here
yy = [0:264];
[X, Y] = meshgrid(xx,yy);
dxf = [221.7, 109.1];  % Again just pulling numbers from nether regions 

G = [X(:),Y(:)];
d = sqrt( sum( (G-dxf).^2, 2) );
[minDist, idxMinDist] = min(d);
solution = G(idxMinDist,:);

您可以修改xx和yy的限制,以适合您的特定设置。