首页 文章

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

提问于
浏览
4

我有一个对象列表 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 回答

  • 3

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

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

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

    并将零更改为 np.inf .

  • 1

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

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

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

相关问题