Networkx节点删除/删除调用

2024-04-23 13:49:02 发布

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

给出一个有向networkx图。我想要一个函数,比如“abc()”,为从图中删除的每个节点调用。我浏览了networkx文档,但没有找到任何这样的回调功能。在

我的想法是:

  1. 将对abc()的调用添加到与节点关联的对象的__del__()(解构器)方法。然而,除了使用__del__()(参见例如here)的缺陷之外,如果内存中某个地方存在指向节点对象的链接,这种方法就不起作用了。在
  2. 子类化networkx.DiGraph()类并重写remove\u node()方法。缺点:这将需要重写所有删除节点的方法,例如remove_nodes_from(还有其他方法吗?)在
  3. 由于networkx图形实现是基于字典的,所以它可以作为某种方式“钩住”此字典的del函数的解决方案。不过,深入networkx进行干预似乎不合适。在

实现每次删除networkx节点时调用的回调函数的最简单方法是什么?在


Tags: 对象方法函数内存文档功能networkx字典
1条回答
网友
1楼 · 发布于 2024-04-23 13:49:02

在这种情况下,您只需要将两个方法子类化。这里有一个例子 从networkx导入有向图

class RemoveNodeDiGraph(DiGraph):
    def remove_node(self, n):
        DiGraph.remove_node(self, n)
        print("Remove node: %s"%n)

    def remove_nodes_from(self, nodes):
        for n in nodes:
            self.remove_node(n)

if __name__=='__main__':
    G = RemoveNodeDiGraph()
    G.add_node('foo')
    G.add_nodes_from('bar',weight=8)
    G.remove_node('b')
    G.remove_nodes_from('ar')

这不会像有向图类中的原始方法那样快(尤其是remove_nodes_from()),但除非您有非常大的图,否则它可能不太重要。如果需要更好的性能,可以直接从这些方法复制代码,而不是调用超类。在

相关问题 更多 >