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")

转载于:https://www.cnblogs.com/haoliuhust/p/8621717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值