我有一个对象列表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
的大小而快速增长。有更快的方法吗?
答案 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。
但是一旦你知道这一点,就无法完成需要完成的计算次数。
幸运的是,它们很容易并行化。创建具有多个线程的矩阵,您将加快速度。