我有两个形状矩阵
(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秒