我有一个对象列表 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 回答
如果存在一个临界截止点,其中距离无关紧要(数据相关的答案),您可以尝试使用scipy.spatial.KDTree.sparse_distance_matrix中的备用矩阵表示 . 对KDTree的了解应该大大减少计算较长距离的时间 .
要使其与群集一起使用,您可能需要注意:
并将零更改为
np.inf
.距离计算是对称的:d(x,y)= d(y,x),因此不需要复制它们 . 并且所有对角线项均为零:d(x,x)= 0 .
但是一旦你知道这一点,就无法完成需要完成的计算次数 .
幸运的是,它们很容易并行化 . 创建具有多个线程的矩阵,您将加快速度 .