【发布时间】:2017-06-09 21:00:23
【问题描述】:
假设我有一个向量列表,我想从中生成一个距离矩阵。什么是一种巧妙的方法?例如,我有一个包含 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”的方式来获取最终距离矩阵?
【问题讨论】:
-
既然你已经标记了
Scipy- 你看过cdist, pdist, squareform in Scipy吗? -
嗯,方形看起来很有希望。我知道 pdist,cdist。感谢您指出。让我试一试。
-
还要注意距离矩阵是对称的,对角线为1,只需要计算一个三角形部分。
-
即只计算 i
-
distance 矩阵的对角线将为 0。