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

问题描述 投票:0回答:2

我正在尝试进行最近邻搜索,将单个点作为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”。

谢谢!泰勒

matlab latitude-longitude nearest-neighbor
2个回答
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的限制以相应地适合您的特定设置。


1
投票

你应该首先将网格转换为n-by-2矩阵(如果你使用meshgrid创建它,它只是G = [XX(:) YY(:)]),你可以用pdist2尝试它,如果你有Statistics and Machine Learning Toolbox(你这样做):

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

哪里G是网格和P是你的m-by-2点测试点。

© www.soinside.com 2019 - 2024. All rights reserved.