假设我有两个networkx图,G
和H
:
G=nx.Graph()
fromnodes=[0,1,1,1,1,1,2]
tonodes=[1,2,3,4,5,6,7]
for x,y in zip(fromnodes,tonodes):
G.add_edge(x,y)
H=nx.Graph()
fromnodes=range(2,8)
tonodes=range(8,14)
for x,y in zip(fromnodes,tonodes):
H.add_edge(x,y)
连接两个networkx图的最佳方式是什么?
我想保留节点名(注意公共节点,2到7)。当我使用nx.disjoint_union(G,H)
时,没有发生这种情况:
>>> G.nodes()
[0, 1, 2, 3, 4, 5, 6, 7]
>>> H.nodes()
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> Un= nx.disjoint_union(G,H)
>>> Un.nodes()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
#
节点标签已更改(不是我想要的)。我想用相同的数字连接节点上的图。
注意。这不是Combine two weighted graphs in NetworkX的副本。
您要寻找的函数是compose,它生成一个包含两个图中的所有边和所有节点的图。如果两个图都有一个同名的节点,那么一个副本就会出现在新图中。同样,如果两个边中都存在相同的边。下面是一个示例,包括边/节点属性:
这些保留属性,但显然如果存在冲突,这是不可能的。
H
的属性优先。也有其他选项可以执行symmetric difference, intersection。。。
如果有多个图要连接在一起,则可以使用^{} ,它只是在
compose
周围包装一个for循环。就是这样。
或者,保留边属性:
并且,要同时保留节点属性,请执行以下操作:
相关问题 更多 >
编程相关推荐