def _build_k_prototypes(self, nprot, data): # K-Means / K-Medoids algorithm # should return a N-length array with he indices of the chosen data grouper = K_Means() grouper._centroid_mode = "index" grouper.fit(data, nprot, iters=300, mode="cuda", cuda_mem='manual', tol=1e-4, max_iters=300) centroids = grouper.centroids nclusters = centroids.shape[0] # TODO - very inefficient k_labels = np.zeros(nclusters, dtype=np.int32) for k in xrange(nclusters): dist = data - centroids[k] dist = dist**2 dist = dist.sum(axis=1) k_labels[k] = dist.argmin() return k_labels