我创建了一个形式的字典
a={'t1':[{seta1},{seta2},{seta3},{seta4}],
't2':[{setb1},{setb2},{setb3},{setb4}],
.
.
.
't100':[{someset1,someset2,someset3,someset4}]}
在哪里
't1','t2','t3',...,'t100'=>timestamps
{seta1},{seta2},{seta3},{seta4}...=>clusters at those respective timestamps
和
b={} #my resulting dictionary
现在我需要在不同的时间戳找到集合的交集,如果有交集,我需要将它们包含在 b 中。
最初,b 是空的,所以整个 a['t1'] 使用键 't1' 进入 b。IE,
if len(b)==0:
b['t1']=a['t1']
现在我从 a 中的第二个键 't2' 开始,像这样找到 b['t1'] 和 a['t2'] 之间的交集
k=[i&j for i in a[key1] for j in b[key2]]
如果 a 和 b 的集合之间存在长度大于或等于 2 的公共交集,那么我创建一个键 't1,t2' 并以这种方式将交集附加到 b
if key2+','+key1 not in b.keys(): #t1,t2 not in b.keys()
b[key2+','+key1]=[]
b[key2+','+key1].append(k)
如果 b[key2] (ie,.b['t1']) 和 a[key1] (ie,.a['t2']) 之间没有交集,那么我需要在 b 中创建 key 't2' 并追加a['t2'] 的非相交集到 b['t2']
所以关键是,在迭代结束时,a['t2'] 和 b['t1'] 中每个集合的迭代部分会让我在 b 中拥有键。't1','t2','t1,t2'
在下一次迭代中,我将考虑 't3' 并找到所有具有键 't1' 、 't2' 、 't1,t2' 的集合的交集。这可能会导致键 't1' , 't2' ,'t1,t2' ,'t1,t3' ,'t1,t2,t3' ,'t2,t3' ,'t3' 。
我正在迭代地做交叉点。IE
for key1 in a.keys():
if len(b)==0:
b[key1]=a[key1]
else:
for key2 in b.keys():
k=[i&j for i in a[key1] for j in b[key2]]
#no intersections? if so, create key1 in b and append the corresponding set of a[key1]
#if intersection of length>1 found, create key2,key1 in b and append the intersecting set. also pop the set from dictionary a if it is a total intersection: which means the complete set in a[key1] is intersecting.
这样做,我正在迭代地寻找交叉点。有没有可能我可以在 python 中使用多处理工具并行执行交叉点?即, t3&t1, t3&t2, t3&(t1,t2) 并行完成,而不是通过为每个交叉点建立一个过程来进行迭代?我不知道多线程/多处理是如何工作的,但到目前为止,我已经了解多线程不会提高性能,但我希望程序加快其执行速度。但是创建过程不是密集型的吗?
请帮忙!