Python 离线等价类

离线等价类的概念见离线等价类
最近在清洗数据的时候涉及到要将相似度比较高的文件夹合并,特征比对得到是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")
posted @ 2018-03-22 09:54  CoderInCV  阅读(546)  评论(0编辑  收藏  举报