0

各プロセスが独自の nx.Graph() を作成し、それにノード/エッジを追加/削除する場合、それらが衝突する理由はありますか? いくつかの奇妙な現象に気づき、それらをデバッグしようとしています。

一般的な問題は、単一のグラフをエッジ リストとしてダンプし、それを各プロセスのサブセットから新しいグラフに再作成していることです。何らかの理由で、これらの新しいグラフにはエッジがありません。

編集:

問題の原因となっているコードの一部を見つけたと思います。問題は、次のことが NetworkX の意図した動作であるかどうかです。

>>> import networkx as nx
>>> g = nx.Graph()
>>> g.add_path([0,1,2,3])
>>> g.nodes()
[0, 1, 2, 3]
>>> g.edges()
[(0, 1), (1, 2), (2, 3)]
>>> g[1][0]
{}
>>> g[0][1] = {"test":1}
>>> g.edges(data=True)
[(0, 1, {'test': 1}), (1, 2, {}), (2, 3, {})]
>>> g[1][0]
{}
>>> g[0][1]
{'test': 1}
>>>

グラフは無方向であるため、エッジ データはリクエストのノード ID に関係なく両方に表示されると予想されますが、それは間違った仮定ですか?

4

1 に答える 1

0

一般に、それぞれが独自の Graph() オブジェクトを持っている限り、複数のプロセスに問題はありません。

編集:

あなたの場合、次の行を使用して、データを内部 NetworkX Graph 構造に明示的に割り当てています。

>>> g[0][1] = {"test":1}

技術的には許可されていますが、API とデータ構造が壊れます。代わりに使用する必要があります

>>> g.add_edge(0,1,test=1)

ここでは新しいエッジは追加されず、新しい属性のみが追加されます。そのようにすると、データが g[0][1] と g[1][0] に正しく割り当てられます。

于 2013-04-30T18:11:42.107 に答える