Python NetworkX中图的交集
我有两个图,我想得到一个有相交边的图。 例如,如果我们有:Python NetworkX中图的交集,python,networkx,Python,Networkx,我有两个图,我想得到一个有相交边的图。 例如,如果我们有: import networkx as nx graph1 = nx.barabasi_albert_graph(100, 3) graph2 = nx.watts_strogatz_graph(100, 4, 0.15) nx.draw_networkx(graph1, with_labels=True) nx.draw_networkx(graph2, with_labels=True) 我怎样才能找到他们的交叉点?答案取决于你如
import networkx as nx
graph1 = nx.barabasi_albert_graph(100, 3)
graph2 = nx.watts_strogatz_graph(100, 4, 0.15)
nx.draw_networkx(graph1, with_labels=True)
nx.draw_networkx(graph2, with_labels=True)
我怎样才能找到他们的交叉点?答案取决于你如何定义交叉点。如果要保留两个图中的所有相交边,可以使用文档中提到的保留两个图中存在的所有边。假设您有以下图表:
graph1 = nx.barabasi_albert_graph(100, 3)
graph2 = nx.watts_strogatz_graph(100, 4, 0.15)
pos = nx.spring_layout(graph1, scale=20, k=3/np.sqrt(graph1.order()))
nx.draw(graph1, pos=pos, with_labels=True, k=13.8, node_color='lightgreen', node_size=800)
生成以下图表:
graph1 = nx.barabasi_albert_graph(100, 3)
graph2 = nx.watts_strogatz_graph(100, 4, 0.15)
pos = nx.spring_layout(graph1, scale=20, k=3/np.sqrt(graph1.order()))
nx.draw(graph1, pos=pos, with_labels=True, k=13.8, node_color='lightgreen', node_size=800)
我们可以用nx.intersection
生成两个图的交集。这确实要求两个图中的节点集相同。此外,不会删除相交节点。为此,您可以使用获取孤立节点,并将其从图形中删除:
g_int = nx.intersection(graph1, graph2)
g_int.remove_nodes_from(list(nx.isolates(g_int)))
pos = nx.spring_layout(g_int, scale=20, k=3/np.sqrt(g_int.order()))
nx.draw(g_int, pos=pos, with_labels=True, k=13.8, node_color='lightgreen', node_size=800)
我们可以很容易地检查这确实是两个图的边的交点:
set_int = set(graph2.edges()).intersection(graph1.edges())
G_set_int = nx.from_edgelist(set_int)
list(nx.connected_components(G_set_int))
# [{1, 2, 3, 4, 6}, {48, 50}, {8, 9, 10, 72}, {76, 78}, {85, 87}, {53, 54},
# {40, 38}, {28, 30}, {20, 21}]
谢谢)这就是我需要的!