2017-09-08 12 views
1

大きなグラフサンプリングをコーディングしていて、メモリの問題をいくつか満たしています。Pythonでコンビネーションと交差を使用するとメモリエラーが発生する

possible_edges = set(itertools.combinations(list(sampled_nodes), 2)) 
sampled_graph = list(possible_edges.intersection(ori_edges)) 

コードは、これらのノードによって形成される全ての可能なエッジを提供した、sampled_nodesのノードの全ての組み合わせを見つけることになっています。次に、original_edgesとの交点を取って、正確にどの辺が存在するかを調べます。

問題がグラフが巨大なときに、itertools.combinations関数がメモリエラーを引き起こす可能性があります。

私は反復的に交差を計算するためにループを書くと思っていましたが、時間がかかりすぎました。

あなたからのお手伝いをいただければ幸いです。ありがとうございました!

答えて

0

2つのリストの交差を取る代わりに、私はpossible_edgesのすべての組み合わせを作成しないことを選択しました。

ori_edgesでエッジを選択して、両方のノードがsampled_nodesに存在するかどうかを確認します。

sampled_graph = list(set([(e[0], e[1]) for e in ori_edges if int(e[0]) in result_nodes and int(e[1]) in result_nodes])) 

このコードは巨大なリストを作成せず、速度は許容されます。

関連する問題