首页 > 解决方案 > 为什么 sklearn 的 pairwise_distances 比 pairwise_distances 慢很多,即使在计算相同的数据时也是如此?我们如何改进paired_distances?

问题描述

我一直在运行这个简单的代码来计算 X 的距离矩阵:

import numpy as np
from sklearn.metrics import pairwise_distances
from sklearn.metrics.pairwise import paired_distances
import time

n = 10000
X = np.random.RandomState(0).rand(n, 5)

t0 = time.time()
pairwise_distances(X, X)
print(time.time() - t0)

X_tile = np.tile(X, (n, 1))
X_repeat = np.repeat(X, n, axis=0)

t1 = time.time()
paired_distances(X_tile, X_repeat)
print(time.time() - t1)

这将返回(在我的笔记本电脑上,一台 2014 MacBook Pro):

7.2921271324157715
448.4537389278412

这两个函数实际上返回了相同的值。是什么让paired_distances60x 比 慢pairwise_distances?如果,比如说,我们需要使用paired_distances-- 可能是因为我们正在寻找矩阵中的点到不同(可能是随机的)邻居集之间的距离(比如,在矩阵X中,我需要距离X[0]to X[1], X[2],而对于X[1],我需要距离X[2], X[3]等...)我们如何提高其性能?

标签: pythonscikit-learn

解决方案


推荐阅读