【问题标题】:Matlab finding neighbors from a list of coordinatesMatlab从坐标列表中查找邻居
【发布时间】:2013-01-22 18:26:40
【问题描述】:

我有一个由 m 属性组成的 n 元素数组。 id1 x1 y1 id2 x2 y2 ... idn xn yn

我有一个坐标 (x,y),我想找到 (x,y) 最左边、上、下和下的所有元素的 id,这意味着 (x-1,y), (x,y+1), (x+1,y), (x, y-1)。

我怎样才能快速做到这一点?

【问题讨论】:

  • 到目前为止你尝试过什么?如果可以,请发布一些代码。另外,您是否假设您的阵列是“周期性的”?换句话说,(x,x1) 是否与 (x,xn) 相连?
  • 你到底想做什么? (存储值,找到最大值,进行一些计算等),有几种方法可以有效地处理矩阵中元素的最近邻居......

标签: arrays matlab nearest-neighbor neighbours


【解决方案1】:

假设坐标(除了感兴趣的坐标)位于 X (1 x n) 和 Y (1 x n) 中。

1 - 计算到所有坐标的欧几里得距离:

D = sqrt((X - x).^2 + (Y - y).^2));

2 - 对距离向量D进行排序,找出欧几里得距离最小的4个坐标

[M idx] = sort(D);

3- 获取最近点的坐标

X(idx(1:4))
Y(idx(1:4))

检查它是否有效...

【讨论】:

    【解决方案2】:

    @奥利弗: 我相信这是行不通的,因为您可以将所有邻居都放在围绕有趣点的同一四分之一圆内。

    在我看来,更好的解决方案应该是将每个感兴趣点周围的区域划分为 4 个区域(在 dX 正、dX 负、dY 正和 dY 负方面不同(dX、dY 对的 4 种组合)。在每个区域中zone 需要找到最小的欧几里得差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2018-02-15
      • 2015-07-11
      • 2012-10-29
      • 2017-03-16
      相关资源
      最近更新 更多