В следующем коде:
num_centroids = 8
vectors = # ndarray of shape (10000, 128)
centroids = np.random.uniform(-1., 1., (num_centroids , vectors.shape[1]))
for _ in range(max_iterations):
distances = sklearn.metrics.pairwise.euclidean_distances(vectors, centroids)
# can this (the centroid update) be done any cleaner?
for c in range(num_centroids):
centroids[c] = np.mean(vectors[np.argmax(distances, axis=1) == c], axis=0)
Существует ли более эффективный или более чистый способ (кроме цикла for) присваивать каждому centroid
(строке в матрице centroids
) среднее значение, рассчитанное по индексированной матрице vector
, учитывая, что Индекс centroid
(c
) и индексирование вектора с argmax
совпадают?