#python #scikit-learn
#python #scikit-learn
Вопрос:
Я запускал этот простой код для вычисления матрицы расстояний 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)
Это возвращает (на моем ноутбуке MacBook Pro 2014 года):
7.2921271324157715
448.4537389278412
Две функции эффективно возвращают одни и те же значения. Что делает paired_distances
60x медленнее, чем pairwise_distances
? И если, скажем, нам нужно использовать paired_distances
— возможно, потому, что мы ищем расстояния между точками в матрице до разных (возможно, случайных) наборов соседей (скажем, в матрице X
мне нужны расстояния от X[0]
до X[1], X[2]
, тогда как для X[1]
мне нужны расстояния до X[2], X[3]
и т. Д.), Как мы можем улучшить егопроизводительность?
Комментарии:
1. Я получаю времена
1.44
и3.85
— коэффициент ~ 2 согласуется с тем фактом, чтоpairwise_distances
должен выполнять примерно половину вычислений aspaired_distances
(поскольку расстояние симметрично). Хотя я не знаю, что происходит с вами…2. Из-за ограничений памяти я использовал в 10 раз меньше данных, но также получил результаты, совпадающие с результатами @bogovicj, равными 0,02439403533935547 и 0,04340338706970215, а также с коэффициентом около 2.