假设我有一个向量列表,我想从中生成一个距离矩阵。什么是一个简洁的方法呢?例如,我有一个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
有没有一种"更整洁"或"Python"的方法来得到最终的距离矩阵?
3条答案
按热度按时间798qvoo81#
基于@Divakar的建议,我得到了我想要的。下面是为那些正在寻找答案的人准备的片段:
而且,是的(感谢@Warren),距离矩阵的对角线是零。
z9ju0rcb2#
我能想到的最简单的方法是:
pw9qyyiw3#
再次感谢@Divakar,它提供了一种更简洁的方法:
不能再好了!!
谢谢!