contracted_nodes#
- contracted_nodes(G, u, v, self_loops=True, copy=True)[source]#
返回由收缩
u和v得到的图。节点收缩将这两个节点识别为一个单一节点,该节点与原有两个节点所连接的任何边相连。
- Parameters:
- GNetworkX 图
将要进行节点收缩的图。
- u, v节点
必须是
G中的节点。- self_loops布尔值
如果为 True,
G中连接u和v的任何边在返回的图中将成为新节点上的自环。- copy布尔值
如果为 True(默认 True),将复制
G并返回该副本,而不是直接修改G。
- Returns:
- Networkx 图
如果 Copy 为 True, 返回一个与
G类型相同的新图对象(G保持不变),其中u和v被识别为一个单一节点。右节点v将被合并到节点u中,因此返回的图中只会出现u。 如果 copy 为 False, 修改G,使u和v被识别为一个单一节点。右节点v将被合并到节点u中,因此返回的图中只会出现u。
See also
Notes
对于多重图,重定向边的边键可能与旧边的边键不同。这是因为边键在每对节点中仅是唯一的。
对于非多重图,如果
u和v与第三个节点w相邻,边 (v,w) 将被收缩到边 (u,w),其属性存储在一个 “contraction” 属性中。此函数也可作为
identified_nodes使用。Examples
收缩四节点循环图
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()) # 原图 G 中的边 1->2, 2->2, 2<-2 [(1, 1), (1, 1), (1, 1)] >>> H = nx.contracted_nodes(G, 1, 2, self_loops=False) >>> list(H.edges()) # 原图 G 中的边 2->2, 2<-2 [(1, 1), (1, 1)]