在Networkx中合并两个或多个图形时如何节省时间

2024-04-20 05:27:18 发布

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

我们现在正在处理区块链数据并运行Python Jupyter笔记本中的代码。我发现在networkx中没有合并两个图的联合函数,所以我只是手动合并。 由于一个图中可能存在自循环和多条边,而两个图中可能存在公共节点,因此我首先分别创建两个图,然后从这两个图中提取节点和边,然后创建两个图中唯一节点和所有边的并集。之后,我使用并集节点和边创建了一个新的更大的图。 由于总共有2600万个数据,我花了大约30分钟创建每个图形,花了30分钟创建并集边和节点。 由并集边和节点生成两周图需要56分钟,因此,使用并集函数生成两周图的整个过程需要120分钟。 由于我们刚刚测试了两周的数据,花费了很长时间,我们认为处理几个月的数据将是一场噩梦。我想知道这些方法是否可以帮助我们在运行程序时节省更多的时间和内存代码。这里代码是:

分别创建两个图形,每个图形花费30分钟

edges_week2 = [tuple(x) for x in week2.to_records(index=False)]
df1 = week2.stack().reset_index(drop=True, level=1).reset_index(name='Nodes')
nodes0 = df1['Nodes'].tolist()
nodes_week2 = list(set(nodes0))

G_week1 = nx.MultiDiGraph()
G_week1.add_nodes_from(nodes_week1)
G_week1.add_edges_from(edges_week1)
G_week2 = nx.MultiDiGraph()
G_week2.add_nodes_from(nodes_week2)
G_week2.add_edges_from(edges_week2)

创建并集边和节点,花了30分钟

week_union_nodes=list(set(list(G_week1.nodes)+list(G_week2.nodes)))
week_union_edges=list(list(G_week1.edges())+list(G_week2.edges()))

从并集边和节点创建两周的图形需要56分钟

G_week_union=nx.MultiDiGraph()
G_week_union.add_nodes_from(week_union_nodes)
G_week_union.add_edges_from(week_union_edges)

Tags: 数据代码fromadd图形index节点list