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
Beispiel #2
0
startE = cuda.event()
endE = cuda.event()

startE.record()
_cu_label_kernel_dists[gridDim,blockDim](dData,dCentroids,dLabels,dDists)
endE.record()
endE.synchronize()
print cuda.event_elapsed_time(startE,endE)

startE.record()
dDists.copy_to_host(ary = generator._dists)
labels = dLabels.copy_to_host(ary = generator.labels)
endE.record()
endE.synchronize()
print cuda.event_elapsed_time(startE,endE)

del generator, dData, dCentroids, dLabels, dDists

generator = K_Means(mode="numpy")
generator.n_clusters = 176
generator.max_iter = 1
generator.fit(data)

generator = K_Means(mode="cuda", cuda_mem="manual")
generator.n_clusters = 176
generator.max_iter = 1
generator.fit(data)

if __name__ = "__main__":
	main()