【发布时间】:2017-06-22 03:07:19
【问题描述】:
我得到一个由浮点值组成的二维 numpy 数组 X,需要计算所有行对之间的欧几里得距离,然后计算距离最小的前 k 行索引并返回它们(其中 k > 0 )。我正在用一个小数组进行测试,这就是我目前所拥有的......
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个最小距离,并以列表的形式依次返回(row1, row2, distance_value)对应的k个元组。
所以在上面的测试用例中,如果 k = 2,那么我需要返回以下内容:
[(0, 2, 2.6925824), (0, 3, 3.34215499)]
是否有内置方式(在 scipy、sklearn、numpy 等中)或任何其他方式来帮助有效地计算?虽然上面的测试用例很小,但实际上二维数组非常大,所以内存和时间是一个问题。谢谢
【问题讨论】:
标签: python numpy scipy scikit-learn euclidean-distance