NumPy: векторизовать сумму расстояний до набора точек - PullRequest
1 голос
/ 26 декабря 2011

Я пытаюсь реализовать алгоритм кластеризации k -medoids в Python / NumPy.В рамках этого алгоритма я должен вычислить сумму расстояний от объектов до их «медоидов» (представителей кластеров).

У меня есть: матрица расстояний на пять точек

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.Мне не хватает какой-то векторизованной идиомы для вычисления этой суммы?

1 Ответ

1 голос
/ 26 декабря 2011

Как насчет:

In [17]: D[np.arange(n_samples),medoids[cl]].sum()
Out[17]: 10.777269629999999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...