NumPy:向量化到一组点的距离之和

1 投票
1 回答
592 浏览
提问于 2025-04-17 09:02

我正在尝试在Python/NumPy中实现一个叫做k-medoids的聚类算法。这个算法的一部分是计算每个对象到它们的“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

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的循环。我是不是漏掉了什么可以用来计算这个总和的向量化方法?

1 个回答

1

你觉得这样怎么样:

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

撰写回答