【问题标题】:Have 2 batches of vectors one matrix is 128 X 120 and the other is 100 X 120 how do I computer euclidean distance?有 2 批向量,一个矩阵是 128 X 120,另一个是 100 X 120 我如何计算欧几里得距离?
【发布时间】:2025-12-01 10:05:01
【问题描述】:

有 2 批向量,一个矩阵是 128 X 120,另一个是 100 X 120 如何计算欧式距离?

所以我有 128 个长度为 120 的向量和另外 100 个长度为 120 的向量。 我想计算 128 与另一个张量中的 100 个向量中的每一个之间的欧几里得距离。所以我的返回结果应该是 128 X 100,因为在前 128 个向量的欧几里得距离中,对于另一批中的 100 个向量中的每一个,张量 [0,0] 对应于向量 0 out of 128 和向量 0 out 之间的欧几里得距离100 和 tensor[0,-1] 对应于 128 中的向量 0 与另一批次中 100 中的最后一个向量之间的欧式距离。

我确信有一种方法可以在没有双 for 循环的情况下做到这一点,但我不确定如何。

【问题讨论】:

    标签: pytorch euclidean-distance


    【解决方案1】:

    你有 x 形状 128x120y 形状 100x120
    计算 L2 距离的简单方法是:

    dist = torch.sqrt(((x[:, None, :] - y[None, ...])**2).sum(dim=2))
    

    但是,此方法的内存占用为 128x100x120。

    一种更有效的方法(利用矩阵乘积和 L2 距离之间的关系)是:

    yt = y.T
    dist = torch.sqrt((x**2).sum(dim=1,keepdim=True) + (yt**2).sum(dim=0,keepdim=True) - 2*x @ yt)
    

    【讨论】:

      最近更新 更多