代码之家  ›  专栏  ›  技术社区  ›  tavalendo

欧氏距离的矢量化实现

  •  1
  • tavalendo  · 技术社区  · 8 年前

    这个问题已经有了答案:

    我试图计算欧几里德距离的矢量化实现(x和y中的每个元素之间使用内积)。数据如下:

    X = np.random.uniform(low=0, high=1, size=(10000, 5))
    Y = np.random.uniform(low=0, high=1, size=(10000, 5))
    

    我所做的是:

    euclidean_distances_vectorized = np.array(np.sqrt(np.sum(X**2, axis=1) - 2 * np.dot(X, Y.T) + np.sum(Y**2, axis=1)))
    

    尽管这给出了“一些输出”,但答案是错误的,因为每行仍然包含5个元素。

    有人知道我做错了什么吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   filippo    8 年前

    如果我理解正确的话

    np.linalg.norm(X - Y, axis=1)
    

    或与 einsum (沿第一轴的每对差分对的点积的平方根)

    np.sqrt(np.einsum('ij,ij->i...', X - Y, X - Y))
    

    如果你想要所有的成对距离

    from scipy.spatial.distance import cdist
    
    cdist(X, Y)
    
    推荐文章