当前位置: 首页 > 知识库问答 >
问题:

如何避免对Networkx图的修改进行就地删除

禄豪
2023-03-14

我有一个netwrokx图形,我正在尝试使用删除边来删除图形的边。我想删除原始图形中的每条边,并对其进行后期处理,以获得更多的统计信息,如连接到已删除边的边。

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\u 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)]

共有1个答案

洪英豪
2023-03-14

复制原始图形并修改副本:

H = G.copy()
...
H.remove_edge(e[0], e[1])
 类似资料:
  • 我有一个预先存在的对象类,它有一个很好的MAY属性。我已经创建了新属性,但我只需要将它们添加到预存在的类中。现在我可以使用iManager(eDirecory的NetIQ接口)将属性添加到类中,但我想知道我是否可以简单地将属性附加到“MAY”部分的对象类,而无需首先删除整个对象类并重新添加它与原始的MAY属性。我注意到很多人都问过这个问题,但我从来没有看到一个回答说你可以做到这一点以及如何做到,或

  • 问题内容: 我有一个包含一些键(字符串)和值(POJO)的地图 我想遍历此映射并更改POJO中的某些数据。 我继承的当前代码将删除给定的条目,并在对POJO进行一些更改后将其重新添加。 这不能很好地进行,因为在遍历地图时您不应该修改地图(方法已同步,但ConcurrentModificationException仍然出现) 我的问题是 ,如果我需要遍历地图并更改值,我可以使用的最佳实践/方法是什么

  • 条款22:避免原地修改set和multiset的键 本条款的动机很容易理解。正如所有标准关联容器,set和multiset保持它们的元素有序,这些容器的正确行为依赖于它们保持有序。 如果你改了关联容器里的一个元素的值(例如,把10变为1000),新值可能不在正确的位置,而且那将破坏容器的有序性。很简单,是吗? 这对于map和multimap特别简单,因为试图改变这些容器里的一个键值的程序将不能编译

  • 本文向大家介绍如何避免回调地狱?相关面试题,主要包含被问及如何避免回调地狱?时的应答技巧和注意事项,需要的朋友参考一下 你可以有以下方式避免回调地狱 模块化:将回调函数转换为独立的函数 使用流程控制库,例如[aync] 使用Promise 使用aync/await 使用来计算生成器或Promise 解析:这个问题有很多种答案,取决你使用的场景,例如ES6, ES7,或者一些控制流库。  

  • 问题内容: 我们都知道您由于以下原因而无法执行以下操作: 但这显然有时有效,但并非总是如此。这是一些特定的代码: 当然,这导致: 即使没有多个线程。无论如何。 解决此问题的最佳方法是什么?如何在不引发此异常的情况下循环地从集合中删除项目? 我还在这里使用任意值,不一定是an t,因此您不能依赖。 问题答案: 是安全的,您可以这样使用它: 注意,这是在迭代过程中修改集合的唯一安全方法。如果在进行迭代

  • 问题内容: 是否可以逐行解析文件,并在逐行浏览时就地编辑行? 问题答案: 可以像·的·模块一样使用备份文件来模拟它。 这是一个示例脚本,该脚本·从命令行或上给出的文件中删除不满意的行stdin: 例: 完成后·,·文件将仅包含满足·谓词的行。