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 回答