计算成对距离矩阵的有效方法?

时间:2013-11-01 14:36:42

标签: python matrix

我有一个对象列表list_of_objects,我使用scipy.cluster.hierarchy.linkage()将其聚集在一起。输入scipy.cluster.hierarchy.linkage()采用压缩距离矩阵。我使用itertools.combinations来比较唯一组合来计算压缩距离矩阵:

distances = map(do_comparison, itertools.combinations(list_of_objects, 2))

即便如此,它需要的时间会随着list_of_objects的大小而快速增长。有更快的方法吗?

2 个答案:

答案 0 :(得分:3)

如果存在距离无关紧要的临界截止值(数据相关的答案),您可以尝试使用scipy.spatial.KDTree.sparse_distance_matrix中的备用矩阵表示。对KDTree的了解应该大大减少计算较长距离的时间。

要使其与群集一起使用,您可能需要注意:

  

计算两个KDTrees之间的距离矩阵,将任何距离保持为零,大于max_distance

并将零更改为np.inf

答案 1 :(得分:1)

距离计算是对称的:d(x,y)= d(y,x),因此无需复制它们。并且所有对角线项均为零:d(x,x)= 0。

但是一旦你知道这一点,就无法完成需要完成的计算次数。

幸运的是,它们很容易并行化。创建具有多个线程的矩阵,您将加快速度。