假设我有一个 75x50 的零矩阵,其中每个零都将被替换为距矩阵中某个引用索引的距离,例如每个具有一对索引 (i, j) 的元素告诉我距引用的欧几里得距离观点。因此,如果引用点位于(i = 25,j= 44),我需要计算每个其他“i”和“j”到该点的距离。我可以用一对循环来做到这一点,但由于我的矩阵实际上要大得多,我想知道是否以及如何才能使其更快。
谢谢
最佳答案
一种方法是使用 bsxfun
与 hypot
功能。就像这样:
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
您可以将它们视为矢量坐标。然后我们减去 i
和j
使该点等于零,并且每个其他点给出向量空间中距它们的距离(例如 <-2,3>
)。 @hypot
然后计算所述向量的长度(例如,<-2,3>
将变为 4.0)。它对矩阵的每个元素执行此操作,然后矩阵就成为欧几里德距离矩阵。
请注意,这可能不是幕后实际发生的情况,但我发现这是一种有用的思考方式。
关于performance - 在Matlab中,找到每个矩阵元素的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280157/