scipy 最快的成对距离实现python/c++

g6ll5ycj  于 2023-10-20  发布在  Python
关注(0)|答案(1)|浏览(119)

我正在寻找在c++/python中两组向量(两个2D数组)之间的成对距离的最快实现。
我做了什么?**我在服务器上运行了here的代码。在python中,我发现scikit learn中的pairwise distance函数和scipy.special.distance中的cdist有最快的pairwise distance实现。

**问题:**计算成对距离是我程序的主要瓶颈。因此,我想知道如果纯粹用C编码,计算成对距离是否更快(考虑到scikit-learn中的大部分底层代码,scipy是用C编写的)?

ccgok5k5

ccgok5k51#

一种快速的方法是使用欧几里得距离的扩展,可以通过矩阵乘法来执行(从这里开始):
距离(X,Y)²=<$X−Y,X−Y <$=<$X,X <$+<$Y,Y <$−2 <$X,Y <$
在numpy中,可以这样执行:

all_distances = np.sum(A**2, axis=1)[:, None] + np.sum(B**2, axis=1) - 2 * A @ B.T

繁重的工作(A @ B.T)是由numpy在后台使用的经过高度优化的矩阵乘法库完成的。
另请参阅PyTorch的torch.cist函数,其中包含compute_mode='use_mm_for_euclid_dist'

相关问题