【问题标题】:NetworkX trivially nested viewsNetworkX 简单的嵌套视图
【发布时间】:2020-02-05 22:40:22
【问题描述】:

来自networkx.DiGraph.reverse 文档。

DiGraph.reverse(copy=True)[source] 返回图形的反转。 反向是具有相同节点和边但边的方向相反的图。

copy (bool optional (default=True)) - 如果为真,则返回一个新的有向图,其中包含反向边。如果为 False,则使用原始图的视图创建反向图。

来自 networkx graph views 文档:

注意:由于 graphview 看起来像图表,因此最终可能会出现 view-of-view-of-view 链。小心链,因为它们在大约 15 个嵌套视图时会变得非常缓慢。

问题

如果我在我的图表上反复调用 G.reverse(copy=False) 以在原始视图和反向视图之间交替,这是否会导致所谓的“嵌套视图链”,即使视图是微不足道的循环?

【问题讨论】:

    标签: python graph networkx


    【解决方案1】:

    看起来是这样的:

    import networkx as nx
    G = nx.directed_configuration_model([1,5]*30, [2,3,4]*20)  #a simple directed graph
    H = G.reverse(copy = False)
    H
    >  <networkx.classes.graphviews.MultiReverseView at 0x10bf61c88>
    I = H.reverse(copy = False)
    I
    >  <networkx.classes.graphviews.MultiReverseView at 0x10bf69a90>
    

    如果查看源代码,在copy = False 的情况下,它调用reverse_view,其代码为here。它不会检查它是否已经是反向视图。

    如果不是这样,它可能会引入问题。您可能希望视图的行为与图表不同,如果它实际上返回图表,代码可能会出现异常。

    【讨论】:

    • 我同意它应该总是返回一个视图,但是问题不在于它是否应该返回一个视图,而是它是否不会缩短这些琐碎的视图,即如果我们有一个视图链,并且连续有两个反向,它们应该被压扁。
    • 它没有。我不知道改变它会有多复杂。
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多