在我的原始程序中,我试图遍历edge_list
长度约为 70K 的所有路径。脚本永远不会出现(运行超过一天)有关如何加快此操作的任何提示?它适用于像下面这样的较小列表(长度 4)
尝试了函数式和迭代式编程。
import networkx as nx
edge_list =[(0, 1), (1, 2), (0, 3), (3, 2)]
G = nx.DiGraph(edge_list)
roots = (v for v, d in G.in_degree() if d == 0)
leaves = (v for v, d in G.out_degree() if d == 0)
函数式编程方法
from itertools import chain
from itertools import product
from itertools import starmap
from functools import partial
chaini = chain.from_iterable
paths = partial(nx.all_simple_paths, G)
all_paths = list(chaini(starmap(paths, product(roots, leaves))))
print(all_paths)
迭代编程方法
all_paths = []
for root in roots:
for leaf in leaves:
paths = nx.all_simple_paths(G, root, leaf)
all_paths.extend(paths)
print(all_paths)
输出 :
[[0, 1, 2], [0, 3, 2]]