假设我有一个向量列表,我想从中生成一个距离矩阵。什么是巧妙的方法呢?例如,我有一个包含 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/