在Matlab中,找到每个矩阵元素的距离

时间:2013-11-29 07:06:50

标签: performance matlab matrix

假设我有一个75x50的零矩阵,其中每个零将被矩阵中某个参考索引的距离所取代,例如每个具有一对索引的元素(i,j)告诉我距参考的欧几里德距离点。因此,如果参考点位于(i = 25,j = 44),我需要计算从其他每个“i”和“j”到这一点的距离。我可以通过一对循环来做到这一点,但由于我的矩阵实际上要大得多,我想知道我是怎么做得更快的。

由于

1 个答案:

答案 0 :(得分:2)

执行此操作的一种方法是将bsxfunhypot函数一起使用。像这样:

rows = 75;
cols = 50;
i=25;
j=44;
bsxfun(@hypot, (1:rows)' - i, (1:cols) - j);

基本上这是做生成两个矩阵。一个像这样:

1  2  3  ...  50
1  2  3  ...  50
...

和另一个像这样:

1  1  1 ...
2  2  2
...
75 75 75

您可以将这些视为矢量坐标。然后我们从它们中减去ij,使得该点等于零,并且每个其他点在向量空间中给出它们的距离(例如<-2,3>)。然后@hypot计算所述向量的长度(例如,<-2,3>将变为4.0)。它对矩阵的每个元素都这样做,然后它成为你的欧氏距离矩阵。

请注意,这可能不是幕后实际发生的事情,但我发现这是一种有用的思考方式。