形式の辞書を作成しました
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 に移動します。つまり、
if len(b)==0:
b['t1']=a['t1']
今、私は 't2' の 2 番目のキーから始めて、このように 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] (つまり.b['t1']) と a[key1] (つまり.a['t2']) の間に交差がない場合は、b にキー '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' になる場合があります。
私は交差点を繰り返しやっています。すなわち
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) は、交差点ごとにプロセスを開始して反復するのではなく、並列に実行されますか? マルチスレッド/マルチプロセッシングがどのように機能するかはわかりませんが、これまでのところ、マルチスレッドがパフォーマンスを向上させないことは理解していますが、プログラムの実行を高速化したいと考えています。しかし、プロセス集約的な作成ではありませんか?
助けてください!