计算彼此之间距离不超过某个常数的点的索引矩阵



考虑一个大小为 nxn 的方阵 D,它表示 n 点之间的成对距离,即 D(1, 2( 是点 1 和 2 之间的距离,或者, 一般来说,D(i, j( 是点 i 和 j 之间的距离。

我想计算另一个矩阵 L,其大小为 mx 2 的索引 (i, j( 的 m 点,其彼此之间的距离不超过某个常数 w。

例如,给定 D

octave:1> D = [1 2 3; 4 5 6; 7 8 9]
D =
   1   2   3
   4   5   6
   7   8   9
对于 w = 4,

我希望在 L 中使用距离不超过 w = 4 的点的索引 (i,j(

octave:2> L = [1 2; 2 2; 3 2; 1 3; 2 3; 3 3]
L =
   1   2
   2   2
   3   2
   1   3
   2   3
   3   3

作为第一个近似值,我相当天真地这样做了

D(D > w) = 0;
L = [];
for i = 1:size(D,1)
  for j = 1:size(D,2)
    if D(i, j) != 0
      L = [L; i j];
    end
  end
end

有没有更快(强调更快(或更简单的方法可以做到这一点?我对MATLAB不太熟悉。

使用 find

D = [1 2 3; 4 5 6; 7 8 9];
w = 4;
[I, J] = find(D <= w);
L = [I J];

最新更新