def kmeans(self, pixelcluster=True): ''' calculates kmeans centers for the cob from the centers of the kernels it contains ''' if pixelcluster == True: pixellist = [] for kernel in self.kernellist: pixellist.extend(kernel.pixellist) kmeans = Kernel.KMeans(n_clusters=2).fit(pixellist) else: kmeans = Kernel.KMeans(n_clusters=2).fit(self.kernelcenters) meanc1 = kmeans.cluster_centers_[0].tolist() meanc2 = kmeans.cluster_centers_[1].tolist() sizec1 = 0 sizec2 = 0 kernelclusters = [] for kernel in self.kernellist: for cluster in kernel.clusters: kernelclusters.append(cluster) for label, cluster in zip(kmeans.labels_, kernelclusters): if label == 0: sizec1 += cluster[0] elif label == 1: sizec2 += cluster[0] self.clusters.append([sizec1, meanc1]) self.clusters.append([sizec2, meanc2])
def kmeans(self): ''' calculates kmeans centers for the repline from the centers of the cobs it contains ''' if len(self.coblist) > 1: allkernelsizes = [] self.allkernelclusters = [] for cob in self.coblist: for kernel in cob.kernellist: for cluster in kernel.clusters: allkernelsizes.append(cluster[0]) self.allkernelclusters.append(cluster[1]) kmeans = Kernel.KMeans(n_clusters=2).fit(self.allkernelclusters) meanc1 = kmeans.cluster_centers_[0].tolist() meanc2 = kmeans.cluster_centers_[1].tolist() sizec1 = 0 sizec2 = 0 for label, size in zip(kmeans.labels_, allkernelsizes): if label == 0: sizec1 += size elif label == 1: sizec2 += size self.clusters.append([sizec1, meanc1]) self.clusters.append([sizec2, meanc2]) self.checkdistance() else: self.segregating = self.coblist[0].segregating self.clusters = self.coblist[0].clusters