def merge_same(self): #合并关联密度吸引点 uf = UnionFind(self.n) for i in range(self.n): for j in range(i + 1, self.n): if dist(self.attrs[i], self.attrs[j]) < 2 * DELTA: uf.merge(i, j) uf.arrange() new_attrs = [] for position in uf.pos: new_attrs.append(self.attrs[position]) self.attrs = new_attrs for i in range(self.n): self.bel.append(uf.sid[i])
def merge_cluster(self): #合并簇 uf = UnionFind(len(self.attrs)) is_higher = [self.f_gauss(p) >= XI for p in self.ps] for i in range(self.n): for j in range(i + 1, self.n): if self.bel[i] != self.bel[j] \ and is_higher[i] \ and is_higher[j] \ and (not self.is_out[self.bel[i]]) \ and (not self.is_out[self.bel[j]]) \ and dist(self.ps[i], self.ps[j]) < K: uf.merge(self.bel[i], self.bel[j]) uf.arrange() for i in range(len(self.attrs)): self.cluster_id.append(uf.sid[i])