我努力找到如何使用networkx计算有向图的传递闭包已经出乎意料地空洞。这似乎不太可能不在networkx中,所以...它在哪里? (我知道Sage包含此功能。)
答案 0 :(得分:1)
NetworkX中没有传递闭包功能。但我认为你可以在一行中做到这一点:-)。 (另)
In [1]: import networkx as nx
In [2]: G = nx.DiGraph([(1, 2), (2, 3), (3, 2), (3, 4)])
In [3]: H = nx.DiGraph([(u,v,{'d':l}) for u,adj in nx.floyd_warshall(G).items() for v,l in adj.items() if l > 0 and l < float('inf')])
In [4]: H.adj
Out[4]:
{1: {2: {'d': 1.0}, 3: {'d': 2.0}, 4: {'d': 3.0}},
2: {3: {'d': 1.0}, 4: {'d': 2.0}},
3: {2: {'d': 1.0}, 4: {'d': 1.0}},
4: {}}