如何避免就地删除 Networkx 图的修改
How to avoid inplace removal of modification of a Networkx graph
我有一个 netwrokx 图,我正在尝试使用 remove_edges
移除图的边缘。
我想删除原始图中的每条边,然后 post-process H
以获得进一步的统计信息,例如连接到已删除边的边。
import networkx as nx
import matplotlib.pyplot as plt
# fig 1
n=10
G = nx.gnm_random_graph(n=10, m=10, seed=1)
nx.draw(G, with_labels=True)
plt.show()
for e in [[5, 0], [3, 6]]:
H = G.remove_edge(e[0], e[1])
nx.draw(G, with_labels=True)
plt.show()
上面G中的边被原地去掉了,所以第二次迭代,原来的图就没有了
现在更长。如何避免这种情况?我想为每次迭代保留原始图形,而是将边缘去除后得到的图形存储在另一个副本 H.
任何建议将不胜感激。
编辑:基于下面的建议
n=10
G = nx.gnm_random_graph(n=10, m=10, seed=1)
nx.draw(G, with_labels=True)
plt.show()
G_copy = G.copy()
for e in [[5, 0], [3, 6]]:
print(G_copy.edges())
H = G_copy.remove_edge(e[0], e[1])
nx.draw(G_copy, with_labels=True)
plt.show()
打印(G_copy.edges())
获得的输出:
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
[(0, 6), (0, 7), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
预计:
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
复制原始图形并修改副本:
H = G.copy()
...
H.remove_edge(e[0], e[1])
我有一个 netwrokx 图,我正在尝试使用 remove_edges
移除图的边缘。
我想删除原始图中的每条边,然后 post-process H
以获得进一步的统计信息,例如连接到已删除边的边。
import networkx as nx
import matplotlib.pyplot as plt
# fig 1
n=10
G = nx.gnm_random_graph(n=10, m=10, seed=1)
nx.draw(G, with_labels=True)
plt.show()
for e in [[5, 0], [3, 6]]:
H = G.remove_edge(e[0], e[1])
nx.draw(G, with_labels=True)
plt.show()
上面G中的边被原地去掉了,所以第二次迭代,原来的图就没有了 现在更长。如何避免这种情况?我想为每次迭代保留原始图形,而是将边缘去除后得到的图形存储在另一个副本 H.
任何建议将不胜感激。
编辑:基于下面的建议
n=10
G = nx.gnm_random_graph(n=10, m=10, seed=1)
nx.draw(G, with_labels=True)
plt.show()
G_copy = G.copy()
for e in [[5, 0], [3, 6]]:
print(G_copy.edges())
H = G_copy.remove_edge(e[0], e[1])
nx.draw(G_copy, with_labels=True)
plt.show()
打印(G_copy.edges())
获得的输出:
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
[(0, 6), (0, 7), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
预计:
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
[(0, 6), (0, 7), (0, 5), (1, 4), (1, 7), (1, 9), (2, 9), (3, 6), (3, 4), (6, 9)]
复制原始图形并修改副本:
H = G.copy()
...
H.remove_edge(e[0], e[1])