Arrays Matlab从坐标列表中寻找邻居
我有一个由m属性组成的n元素数组。 id1 x1 y1 id2 x2 y2 ... idn xn yn 我有一个坐标(x,y),我想找到元素的所有ID,它们在(x,y)的最左边、最上面、最下面和最下面,这意味着 (x-1,y),(x,y+1),(x+1,y),(x,y-1) 如何快速完成此操作?假设坐标(感兴趣的坐标除外)位于X(1xn)和Y(1xn)中 1-计算到所有坐标的欧几里德距离:Arrays Matlab从坐标列表中寻找邻居,arrays,matlab,nearest-neighbor,neighbours,Arrays,Matlab,Nearest Neighbor,Neighbours,我有一个由m属性组成的n元素数组。 id1 x1 y1 id2 x2 y2 ... idn xn yn 我有一个坐标(x,y),我想找到元素的所有ID,它们在(x,y)的最左边、最上面、最下面和最下面,这意味着 (x-1,y),(x,y+1),(x+1,y),(x,y-1) 如何快速完成此操作?假设坐标(感兴趣的坐标除外)位于X(1xn)和Y(1xn)中 1-计算到所有坐标的欧几里德距离: D = sqrt((X - x).^2 + (Y - y).^2)); 2-对距离向量D进行排序,以找到
D = sqrt((X - x).^2 + (Y - y).^2));
2-对距离向量D进行排序,以找到欧氏距离最小的4个坐标
[M idx] = sort(D);
3-获取最近点的坐标
X(idx(1:4))
Y(idx(1:4))
检查它是否工作…@Oliver:
我相信这是行不通的,因为你可能会让所有的邻居都在同一个圆的四分之一里围绕着这个有趣的点
在我看来,一个更好的解决方案应该是将每个感兴趣点周围的区域划分为4个区域(dX正、dX负、dY正和dY负(4个dX、dY偶的组合)。在每个区域中,需要找到最小的欧几里德差异。到目前为止,您尝试了什么?如果可以,请发布一些代码。此外,您是否假设数组是“周期性”的?换句话说,(x,x1)与(x,xn)相连?您到底想用它做什么?(存储值,找到最大值,进行一些计算,等等),有几种方法可以有效地处理矩阵中元素的最近邻。。。