NetworkX:图形更改和恢复

2024-10-03 15:33:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有很多节点和边的多重图。我对x个节点进行随机移除,并计算图后期移除的全局效率(GE)。在

我想删除成群的节点,每次测试全局效率,并生成一个文件,其中包含删除的节点数量和后续的GE,例如:

5% removed GE: 1
10% removed GE: 0.4
15% removed GE: 0.34
...

实际上,我希望在下一次节点删除迭代之前将图形恢复到其原始状态。我喜欢这样,因为节点移除本质上是随机的。因此,在我删除了5%的节点并测试了GE之后,我想要这个图,然后随机删除一个10%,其中可能包含原始5%移除的一个子集。在

我的尝试:

我试图创建一个全局变量来保存我的原始图形。在

^{pr2}$

结果:

第一次迭代非常成功,5%的节点被删除。第二次迭代似乎无法将MG恢复到原始状态。在

有没有办法全局存储NetworkX图形?


Tags: 文件图形数量节点状态全局子集效率
1条回答
网友
1楼 · 发布于 2024-10-03 15:33:42

将图形存储在一个公共引用original_graph,并使用{a1}创建原始未修改图形的副本,以便对其进行进一步的测试。在

original_graph = nx.multigraph # load MG with the nodes and edges
global original_graph # < - I do not know why you need this unless you are accessing the original_graph from inside a function.
MG = original_graph.deepcopy()

# conduct removal of 5% using MG
# . . .
# . . .


MG = original_graph.deepcopy()

# conduct removal of 10% using MG
# . . .
# . . .

您的方法的问题是MG和{}都指向同一个图形对象。因此,当您更改图形时,您无法恢复到未修改的图形,因为只有一个图形对象具有多个变量,保存对同一对象的引用。所以当你修改的时候,你实际上修改了图形对象的唯一副本。在

现在,当您执行^{}时,您实际上创建了original_graph引用的graph对象的相同副本,并将对新创建的对象的引用分配给执行操作的MG。现在,通过执行另一个deepcopy(),您可以创建original_graph的另一个副本,并将其引用存储在MG中,以便进一步测试,而不需要修改{}的内容。在

希望这有帮助。在

相关问题 更多 >