代码之家  ›  专栏  ›  技术社区  ›  Brandon Dube

点之间的向量/线性代数距离?

  •  0
  • Brandon Dube  · 技术社区  · 7 年前

    假设我有一组点,

    import numpy as np
    pts = np.random.rand(100,3)  # 1000 points, X, Y, Z along second dimension
    

    计算每个点组合之间的距离的幼稚方法涉及一个双for循环,对于大量的点来说速度会非常慢。

    def euclidian_distance(p1, p2):
        d = p2 - p1
        return np.sqrt(d**2).sum()
    
    out = np.empty((pts.shape[0], pts.shape[0]))
    pts_swapped = pts.swapaxes(0,1)
    for idx, point in enumerate(pts_swapped):
        for idx2, point_inner in enumerate(pts_swapped):
            out[idx,idx2] = euclidian_distance(point, point_inner)
    

    如何将此计算向量化?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Brandon Dube    7 年前

    看看 scipy.spatial.distance.cdist . 我不确定,但我想Scipy对这个优化了很多。如果您将pts数组用于两个输入,我假设您将得到一个对角线上有零的m x m数组。功能