【问题标题】:NumPy: vectorize sum of distances to a set of pointsNumPy:将距离总和向量化到一组点
【发布时间】:2012-01-28 01:52:10
【问题描述】:

我正在尝试在 Python/NumPy 中实现 k-medoids 聚类算法。作为该算法的一部分,我必须计算从对象到它们的“中心点”(集群代表)的距离总和。

我有:五个点的距离矩阵

n_samples = 5
D = np.array([[ 0.        ,  3.04959014,  4.74341649,  3.72424489,  6.70298441],
              [ 3.04959014,  0.        ,  5.38516481,  4.52216762,  6.16846821],
              [ 4.74341649,  5.38516481,  0.        ,  1.02469508,  8.23711114],
              [ 3.72424489,  4.52216762,  1.02469508,  0.        ,  7.69025357],
              [ 6.70298441,  6.16846821,  8.23711114,  7.69025357,  0.        ]])

一组初始中心点

medoids = np.array([0, 3])

以及集群成员

cl = np.array([0, 0, 1, 1, 0])

我可以使用

计算所需的总和
>>> np.sum(D[i, medoids[cl[i]]] for i in xrange(n_samples))
10.777269622938899

但这使用了 Python 循环。我是否缺少某种用于计算此总和的矢量化习语?

【问题讨论】:

    标签: python numpy vectorization


    【解决方案1】:

    怎么样:

    In [17]: D[np.arange(n_samples),medoids[cl]].sum()
    Out[17]: 10.777269629999999
    

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 2010-10-12
      • 2017-05-03
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      相关资源
      最近更新 更多