2017-08-16 5 views
1

NetworkX documentationを読んだところ、これはうまくいくはずですが、そうではありませんか?NetworkX MultiDiGraphを辞書との間で変換する

は考えてみましょう:

import networkx as nx 
g = nx.MultiDiGraph() 
g.add_nodes_from([0, 1]) 
g.add_edge(0,1) 
g.add_edge(0,1) 

g.edges() # returns [(0, 1), (0, 1)] 

d = nx.to_dict_of_dicts(g) # returns {0: {1: {0: {}, 1: {}}}, 1: {}} 

g2 = nx.from_dict_of_dicts(d, multigraph_input=True) 
# or, equivalently?, g2 = MultiDiGraph(d) 

g2.edges() # only returns [(0,1)] 

アムは、私がここに些細なエラーを作る、またはこれはバグでしょうか?

私のアプリケーションでは、networkx.readwrite.json_graphを使用してシリアル化するより優れた方法を見つけましたが、他の人にとって役に立ちそうな場合にはここで質問を残しておきたいと思いました。

答えて

1

nx.from_dict_of_dicts()のデフォルトのグラフ出力は、単純なグラフのようです。

>>> g2 
<networkx.classes.graph.Graph at 0x10877add0> 

あなたが望むだろうどの出力と同じタイプの新しい空のグラフを作成してみてください - ので、あなたの場合MultiDiGraphに。次に、あなたの新しいグラフがその型であることを確認するためにnx.from_dict_of_dicts()create_usingパラメータを使用します。

>>> G = nx.MultiDiGraph() 
>>> g3 = nx.from_dict_of_dicts(d, multigraph_input=True, create_using=G) 
>>> g3.edges() 
[(0, 1), (0, 1)] 
>>> g3 
<networkx.classes.multidigraph.MultiDiGraph at 0x1087a7190> 

成功!

+0

優秀!多くの感謝:)私は 'multigraph_input = True'がこれを世話してくれたと思っていましたが、' create_using' argを見逃しました。 – Matthew

関連する問題