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

Python-有效计算两个矩阵中每对行之间的曼哈顿距离

  •  0
  • bluesummers  · 技术社区  · 5 年前

    我有两个形状矩阵 (AxN) (BxN) (AxB) 其中每个元素是每两行之间的曼哈顿距离。

    我试着用 cdist ,但实际上它非常慢,例如,如果我们讨论的是余弦距离,那么下面的代码在相同的数据上花费大约4秒 cdist

    dotted = matrix_a.dot(matrix_b.transpose())
    matrix_a_norms = np.expand_dims(np.linalg.norm(matrix_a, ord=2, axis=1), axis=0)
    matrix_b_norms = np.expand_dims(np.linalg.norm(matrix_b, ord=2, axis=1), axis=0)
    norm_mat = matrix_a_norms.transpose().dot(matrix_b_norms)
    cosine_distance = np.divide(dotted, norm_mat)
    

    所以我想知道,只有在曼哈顿距离的情况下,有没有什么可以快速实现的呢?

    编辑 :

    sklearn

    :

    准确的细节

    A=14587 B=30228 N=300

    dtype float32

    sklearn.pairwise.manhattan_distances cdist(metric='cityblock') 平均需要135秒

    0 回复  |  直到 5 年前