Pythonのセットタイプからグラフを構築
質問
短い質問は、Pythonのセットの集合からグラフを作成するために、自己機能オフがありますか? 長い質問:私はいくつかのpythonセットを持っています。それぞれが重複または一部が他の部分集合です。私は、ノードセット内の要素である(ノードおよびエッジのように)グラフを作りたいです。エッジは、セットの共通部分の要素の数で重み付けを持つセットの交点です。 pythonのためのいくつかのグラフパッケージがあります。 (NetworkX、IGRAPH、...)私はそれらのいずれかの使用に慣れていないです。それらのいずれかがセットのリストすなわち、MakeGraphfromSets(alistofsets)から直接、グラフを作成します ない場合は、エッジを定義するためにセットのリストを取る方法の例を知っています。それはまっすぐ進むかもしれないようですが、実際に見えますが、例を持っていることは常に良いです。
解決
これは自分をコーディングする、あまりにも難しいことではありません。
def intersection_graph(sets):
adjacency_list = {}
for i, s1 in enumerate(sets):
for j, s2 in enumerate(sets):
if j == i:
continue
try:
lst = adjacency_list[i]
except KeyError:
adjacency_list[i] = lst = []
weight = len(s1.intersection(s2))
lst.append( (j, weight) )
return adjacency_list
この機能番号sets
内でのインデックスを持つ各セット。辞書のキーは整数ではなく、セットの真である、不変でなければならないので、我々はこれを行うます。
ここでは、この機能を使用する方法の例だと、それは出力です:
>>> sets = [set([1,2,3]), set([2,3,4]), set([4,2])]
>>> intersection_graph(sets)
{0: [(1, 2), (2, 1)], 1: [(0, 2), (2, 2)], 2: [(0, 1), (1, 2)]}
他のヒント
def MakeGraphfromSets(sets):
egs = []
l = len(sets)
for i in range(l):
for j in range(i,l):
w = sets[i].intersection(sets[j])
egs.append((i,j,len(w)))
return egs
# (source set index,destination set index,length of intersection)
sets = [set([1,2,3]), set([2,3,4]), set([4,2])]
edges = MakeGraphfromSets(sets)
for e in edges:
print e
OUTPUTます:
(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(1, 1, 3)
(1, 2, 2)
(2, 2, 2)
所属していません StackOverflow