快速计算整个数据集的每个聚类中心的距离

时间:2014-04-29 16:35:09

标签: python performance numpy cluster-analysis k-means

在数据聚类问题中,我有两个numpy数组,X和C,其中X对应于观察,C对应于可以用X中的数据形成的聚类的中心。它们都具有相同的数量列(特征),但C通常比X更少行。我试图找到一种快速计算X中每个观察点与C中所有中心之间的最小平方距离的方法。在简单的python中,这可以写出来如

D2 = np.array([min([np.inner(c-x,c-x) for c in C]) for x in X])

这是相当慢的,所以我通过doin来提高速度

D2 = np.array([min(np.sum((C-x)**2, axis=1)) for x in X])
相反,但我还不满意执行时间,因为for循环仍然存在,我相信有希望。有没有人知道如何进一步减少这个的执行时间?

对于好奇的人,我使用它通过K-Means ++算法为K-Means生成种子。

1 个答案:

答案 0 :(得分:2)

使用numpy / scipy堆栈获得的最快速度是专门用于此目的的scipy.spatial.distance.cdist

  

scipy.spatial.distance.cdist(XA, XB, metric='euclidean', p=2, ...)

     

计算两组输入的每对之间的距离。

同样值得注意的是,scipy也提供了kmeans聚类。

scipy.cluster.vq.kmeans