【问题标题】:in Matlab, find the distance for every matrix element在 Matlab 中,找到每个矩阵元素的距离
【发布时间】:2013-11-29 07:06:50
【问题描述】:

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

谢谢

【问题讨论】:

    标签: performance matlab matrix


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。在提供答案之前,我什至没有喝早咖啡 :)
    猜你喜欢
    • 2021-09-23
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2023-03-29
    • 2017-10-05
    • 2013-09-11
    相关资源
    最近更新 更多