您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中最快的成对距离度量

Python中最快的成对距离度量

其他答案都没有完全回答这个问题-1个在Cython,一个比较慢。但是两者都提供了非常有用的提示。跟进他们的建议表明这scipy.spatial.distance.pdist是要走的路。

这是一些代码

import numpy as np
import random
import sklearn.metrics.pairwise
import scipy.spatial.distance

r = np.array([random.randrange(1, 1000) for _ in range(0, 1000)])
c = r[:, None]

def option1(r):
    dists = np.abs(r - r[:, None])

def option2(r):
    dists = scipy.spatial.distance.pdist(r, 'cityblock')

def option3(r):
    dists = sklearn.metrics.pairwise.manhattan_distances(r)

使用IPython计时:

In [36]: timeit option1(r)
100 loops, best of 3: 5.31 ms per loop

In [37]: timeit option2(c)
1000 loops, best of 3: 1.84 ms per loop

In [38]: timeit option3(c)
100 loops, best of 3: 11.5 ms per loop

我没有尝试过Cython实现(我不能在该项目中使用它),但是将我的结果与所做的其他答案进行比较,似乎scipy.spatial.distance.pdist比Cython实现慢了大约三分之一(考虑到不同的机器)通过对np.abs解决方案进行基准测试)。

python 2022/1/1 18:44:21 有321人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶