在 MATLAB 中找到单个点的最近邻居
Finding the nearest neighbor to a single point in MATLAB
我正在尝试进行最近邻搜索,该搜索会产生一个点作为单个 "nearest neighbor" 到 matlab 中的另一个点。
我得到了以下数据:
- 尺寸为 336x264 的经度网格 "lon"
- 经度网格范围内的一些随机点 "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"。
谢谢!
泰勒
您应该首先将您的网格转换为 n-by-2
矩阵(如果您使用 meshgrid 创建它,它只是 G = [XX(:) YY(:)]
),然后您可以尝试使用 pdist2
if you have the Statistics and Machine Learning Toolbox(您做):
[D,I] = pdist2(P, G, 'euclidian', 'Smallest', 1);
其中 G
是网格,P
是您要测试的 m-by-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 的限制以适合您的特定设置。
我正在尝试进行最近邻搜索,该搜索会产生一个点作为单个 "nearest neighbor" 到 matlab 中的另一个点。
我得到了以下数据:
- 尺寸为 336x264 的经度网格 "lon"
- 经度网格范围内的一些随机点 "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"。
谢谢! 泰勒
您应该首先将您的网格转换为 n-by-2
矩阵(如果您使用 meshgrid 创建它,它只是 G = [XX(:) YY(:)]
),然后您可以尝试使用 pdist2
if you have the Statistics and Machine Learning Toolbox(您做):
[D,I] = pdist2(P, G, 'euclidian', 'Smallest', 1);
其中 G
是网格,P
是您要测试的 m-by-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 的限制以适合您的特定设置。