繁体   English   中英

networkx:在有向无环图中收缩相邻节点

[英]networkx: contract adjacent nodes in a directed acyclic graph

放大我的有directed acyclic graph ,你会发现相邻的节点(u,v,w,x,y) 节点w是中心, uvupstreamxydownstream

这导致以下边缘:

(u,w)
(v,w)
(w,x)
(w,y)

![我的狗的图形表示

我想删除节点w并保留图形的流程。 w删除后,边缘应该是

(u,x)
(u,y)
(v,x)
(v,y)

我认为networkx.contracted_nodes(G, u, w, self_loops=False)是通往 go 的途径。但是根据文档,这将生成一个新节点,我们称它为uw和边

(uw,x)
(uw,y)
(v,uw)

这改变了我的图表的行为,而不是我想要的。

有没有办法用.networkx解决?

假设边是元组列表

def foo(arr, key):
    d = {}
    for a, b in arr:
        d.setdefault(a, []).append(b)
    
    if d.get(key) is None:
        return arr
    
    ans = []
    fill_vals = d[key]
    for a, b in arr:
        if a != key:
            if b != key:
                ans.append((a, b))
            else:
                for val in fill_vals:
                    ans.append((a, val))
                    
    return ans

data = [("u", "w"), ("v", "w"), ("w", "x"), ("w", "y")]    
foo(data, "w")
# [('u', 'x'), ('u', 'y'), ('v', 'x'), ('v', 'y')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM