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

标签 performance matlab matrix

假设我有一个 75x50 的零矩阵,其中每个零都将被替换为距矩阵中某个引用索引的距离,例如每个具有一对索引 (i, j) 的元素告诉我距引用的欧几里得距离观点。因此,如果引用点位于(i = 25,j= 44),我需要计算每个其他“i”和“j”到该点的距离。我可以用一对循环来做到这一点,但由于我的矩阵实际上要大得多,我想知道是否以及如何才能使其更快。

谢谢

最佳答案

一种方法是使用 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)。它对矩阵的每个元素执行此操作,然后矩阵就成为欧几里德距离矩阵。

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

关于performance - 在Matlab中,找到每个矩阵元素的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20280157/

相关文章:

Android从gridview布局索引转换成行和列

R - 从 3 个原始向量创建矩阵

python - 根据条件创建新的 numpy 数组

database - Oracle 物化 View VS 物理表

python - MATLAB 的速度是 Numpy 的两倍

matlab - matlab极坐标图中的直线

matlab - 如何强制 Matlab/Octave cov 函数使用可选参数

matlab - MatLab 和 OpenCV 中的 rgb2lab 提供不同的结果

Node.js - 超出最大调用堆栈大小 - vm.runInNewContext

matlab - 如何判断矩阵是否奇异?