Esempio n. 1
0
 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])
Esempio n. 2
0
 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])