Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python NetworkX中图的交集_Python_Networkx - Fatal编程技术网

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}]
谢谢)这就是我需要的!