如何解决从第二个图 networkx 中不存在的图中删除节点
我正在使用 networkx 并且我有两个图表; G1 和 G2。要使用 networkx.difference,图中的节点必须相同,因此我需要删除 G2 中不存在的 G1 中的节点,反之亦然。
我对此的思考过程是从每个节点获取节点列表,然后对每个条目使用“not in”。这看起来真的很慢,而且这些是非常大的图。有没有更好的方法来解决这个问题?
解决方法
如果我理解您的任务,您需要确定 G1 和 G2 的共同节点。根据 G1 和 G2 的类型,Python 集可能是最简单的方法。这是一个简化的示例,假设 G1 和 G2 可以转换/复制到集合中,则可以根据您的情况进行扩展。
g1 = list("ABCDEF")
g2 = list("DEFGHI")
g1_g2_intersection = set(g1) & set(g2)
print(g1_g2_intersection)
{'D','F','E'}
,
这是我的解决方案:
首先,确定要移除的节点,即 G1 中而不是 G2 中的节点的并集,反之亦然:
print("nodes in G1 not present in G2:",G1.nodes() - G2.nodes())
print("nodes in G2 not present in G1:",G2.nodes() - G1.nodes())
nodes_to_remove = (G1.nodes() - G2.nodes()) | (G2.nodes() - G1.nodes()) # '|' -> union between sets:
然后您可以使用以下方法删除所有这些节点:
G1.remove_nodes_from(nodes_to_remove)
G2.remove_nodes_from(nodes_to_remove)
这是一个小例子:
G1 = nx.barabasi_albert_graph(20,2,seed=2)
G2 = nx.barabasi_albert_graph(10,seed=2)
print("nodes in G1 not present in G2:",G2.nodes() - G1.nodes())
nodes_to_remove = (G1.nodes() - G2.nodes()) | (G2.nodes() - G1.nodes())
print(nodes_to_remove)
G1.remove_nodes_from(nodes_to_remove)
G2.remove_nodes_from(nodes_to_remove)
print(G1.nodes() == G2.nodes())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。