python - 从向量列表计算距离矩阵

标签 python numpy scipy

假设我有一个向量列表,我想从中生成一个距离矩阵。什么是巧妙的方法呢?例如,我有一个包含 3 个向量的列表:

k = [[2, 4, 7], [3, 4, 7], [5,1,3]]
distance = pairwise_distances(v1, v2, metric='cosine', n_jobs=-1)

期望的输出:给定向量列表的余弦距离的 numpy 数组。

array([[ 1.        ,  0.00638545,  0.28778769],
       [ 0.00638545,  1.        ,  0.21402251],
       [ 0.28778769,  0.21402251,  1.        ]])

这就是我所做的:使用 itertools.combinations 获得所有组合。计算每对的距离。然后,将距离度量实际放置在“正确的”单元格中会变得有点困惑(需要列表中原始向量的索引)。

combs = list(itertools.combinations(k, 2))
print combs

是否有一种“更简洁”或“pythonic”的方式来获得最终的距离矩阵?

最佳答案

根据@Divakar 的建议,我得到了我想要的。这是为那些正在寻找答案的人准备的片段:

distance_vectors = [cosine_distance([pair[0]], [pair[1]]) for pair in combs]
print distance_vectors

distance_vectors = [x[0][0] for x in distance_vectors]
print distance_vectors
X = squareform(np.array(distance_vectors))
print X

而且,是的(感谢@Warren),距离矩阵的对角线为零。

关于python - 从向量列表计算距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41838748/

相关文章:

python - 在 Jupyter Notebook 中执行 Windows PowerShell 命令

python - 升级 numpy 失败,出现 "Permission denied"错误

python - sklearn支持向量机拟合() "ValueError: setting an array element with a sequence"

matlab - 通过交换行和列来重新排列稀疏数组

python - 如何在 scipy 暴力优化中将最大迭代传递给 fmin

python - 在 scipy.stats.kruskal 中使用类似于 R cran kruskal.test 的组

python - “串在一起”基于一组条件的pymongo查询

python - Pandas 用标签切割多列?

python - 如何在 django 中 save() 后捕获数据库中的所有异常?

python - 为什么 assertAlmostEqual(-inf,-inf) 会失败?