离线等价类的概念见离线等价类
最近在清洗数据的时候涉及到要将相似度比较高的文件夹合并,特征比对得到是1:1的对,比如:
(a,b),(c,d),(a,c)...,那么合并的时候就涉及到将这些等价的对合并成一个大类,直观上这就是一个离线等价类的问题。
import os
import pickle
with open(r"D:\PhotoLibrary\Uface_cropped_pairs\same_pairs0.8.pkl",'rb') as f:
pairs = pickle.load(f)
#construct pair list
pairs_lst={}
for pair in pairs:
a,b = pair
if a not in pairs_lst:
pairs_lst[a]=[]
if b not in pairs_lst:
pairs_lst[b]=[]
pairs_lst[a].insert(0,b)
pairs_lst[b].insert(0,a)
flag={}
classes=[]
S=[]
for item in pairs_lst.items():
if not item[0] in flag:
flag[item[0]]=True
set=[item[0]]
S.append(item[0])
while len(S)>0:
a=S.pop()
for b in pairs_lst[a]:
if not b in flag:
flag[b]=True
S.append(b)
set.append(b)
classes.append(set)
for s in classes:
print(s)
print("test")