【问题标题】:Finding the nearest neighbor to a single point in MATLAB在 MATLAB 中查找单个点的最近邻
【发布时间】:2019-07-19 03:16:47
【问题描述】:

我正在尝试进行最近邻搜索,该搜索会产生一个点作为 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”的点。

谢谢! 泰勒

【问题讨论】:

  • 我不清楚你在问什么。您有一个 336x264 的网格,并且您想找到最接近点 dxf 的点(可能是 2 坐标)的网格点?
  • @beaker 没错!

标签: matlab latitude-longitude nearest-neighbor


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!我试过这个,但它对我来说不太奏效,因为我没有在 meshgrid 中制作我的纬度或经度网格(它们只是来自模型输出为 336x264 变量。
【解决方案2】:

如果您在没有工具箱的情况下工作,您可以自己构建一个简单的距离公式:

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 的限制以适合您的特定设置。

【讨论】:

  • 太棒了!我真的认为这个解决方案会奏效。唯一的问题是我的纬度和经度网格都是 336 x 264 单独的。我需要弄清楚如何将它们排列成一个 1×2 矩阵,就像你文件中的那些一样,然后我应该是金色的!
  • 听起来你很接近。纬度和经度网格可能已经采用“网格网格”格式。如果是这样,只需从 G=[X(:) Y(:)] 步骤开始。 X(:) 格式将二维变量 X 列为一维列表。
  • 是的!我得到了解决方案,谢谢!你说得对。我所要做的就是指定我的 lat 矩阵等于 lat(:),然后将你的代码应用到它上面。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 2012-11-14
  • 2020-11-05
  • 2014-04-12
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多