Мне дана двухмерная матрица X, состоящая из плавающих значений и должна вычислять евклидовы расстояния между всеми парами строк, а затем вычислять верхние индексы k строк с наименьшими расстояниями и возвращаем их (где k> 0). Я тестирую с небольшой массив, и это то, что я до сих пор ...Euclidean distance (python3, sklearn): эффективно вычислять ближайшие пары и их соответствующие расстояния
import numpy as np
from sklearn.metrics.pairwise import euclidean_distances
X_testing = np.asarray([[1,2,3.5],[4,1,2],[0,0,2],[3.4,1,5.6]])
test = euclidean_distances(X_testing, X_testing)
print(test)
В результате распечатке:
[[ 0. 3.5 2.6925824 3.34215499]
[ 3.5 0. 4.12310563 3.64965752]
[ 2.6925824 4.12310563 0. 5.05173238]
[ 3.34215499 3.64965752 5.05173238 0. ]]
Далее необходимо эффективно вычислить верхний K наименьшие расстояния между всеми парами строк и возвращать соответствующие k кортежей (row1, row2, distance_value) в порядке в виде списка.
Таким образом, в приведенном выше тестовом случае, если к = 2, то я должен был бы возвратить следующее:
[(0, 2, 2,6925824), (0, 3, 3,34215499)]
Есть ли встроенный способ (как в scipy, sklearn, numpy и т. Д.), Так и в любом другом способе эффективного вычисления этого? Хотя приведенный выше тестовый пример невелик, на самом деле двухмерный массив очень велик, поэтому память и время являются проблемой. Спасибо