identified_nodes#
- identified_nodes(G, u, v, self_loops=True, copy=True)#
返回收缩
u
和v
后得到的图。节点收缩将两个节点识别为一个单独的节点,该节点与原先两个节点相关联的任何边都相关联。
- 参数:
- GNetworkX 图
将要收缩节点的图。
- u, v节点
必须是
G
中的节点。- self_loops布尔值
如果为 True,则在
G
中连接u
和v
的任何边将成为返回图中新节点上的自环。- copy布尔值
如果为 True(默认为 True),则复制
G
并返回副本,而不是直接修改G
。
- 返回:
- Networkx 图
如果 Copy 为 True,则返回一个与
G
类型相同的新图对象(不修改G
),其中u
和v
被识别为一个单独的节点。右侧节点v
将合并到节点u
中,因此返回的图中将只出现u
。如果 copy 为 False,则修改G
,其中u
和v
被识别为一个单独的节点。右侧节点v
将合并到节点u
中,因此返回的图中将只出现u
。
注意
对于多重图,重新对齐的边的边键可能与旧边的边键不同。这是很自然的,因为边键仅在每对节点内是唯一的。
对于非多重图,其中
u
和v
与第三个节点w
相邻,边 (v
,w
) 将收缩到边 (u
,w
) 中,其属性将存储到“contraction”属性中。此函数也可以通过
identified_nodes
访问。示例
收缩四节点环图
C_4
中的两个不相邻节点,将得到路径图(忽略平行边)>>> G = nx.cycle_graph(4) >>> M = nx.contracted_nodes(G, 1, 3) >>> P3 = nx.path_graph(3) >>> nx.is_isomorphic(M, P3) True
>>> G = nx.MultiGraph(P3) >>> M = nx.contracted_nodes(G, 0, 2) >>> M.edges MultiEdgeView([(0, 1, 0), (0, 1, 1)])
>>> G = nx.Graph([(1, 2), (2, 2)]) >>> H = nx.contracted_nodes(G, 1, 2, self_loops=False) >>> list(H.nodes()) [1] >>> list(H.edges()) [(1, 1)]
在带有自环的
MultiDiGraph
中,入边和出边将被单独视为边,因此在收缩具有自环的节点时,收缩操作将添加多条边>>> G = nx.MultiDiGraph([(1, 2), (2, 2)]) >>> H = nx.contracted_nodes(G, 1, 2) >>> list(H.edges()) # edge 1->2, 2->2, 2<-2 from the original Graph G [(1, 1), (1, 1), (1, 1)] >>> H = nx.contracted_nodes(G, 1, 2, self_loops=False) >>> list(H.edges()) # edge 2->2, 2<-2 from the original Graph G [(1, 1), (1, 1)]