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

时间:2018-10-17 21:13:21

标签: python jupyter-notebook networkx

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

分别创建两个图形,每个图形花费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)

0 个答案:

没有答案