NumPy:向量化到一组点的距离之和
我正在尝试在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