identified_nodes#

identified_nodes(G, u, v, self_loops=True, copy=True)#

返回由收缩 uv 得到的图。

节点收缩将这两个节点识别为一个单一节点,该节点与原有两个节点所连接的任何边相连。

Parameters:
GNetworkX 图

将要进行节点收缩的图。

u, v节点

必须是 G 中的节点。

self_loops布尔值

如果为 True, G 中连接 uv 的任何边在返回的图中将成为新节点上的自环。

copy布尔值

如果为 True(默认 True),将复制 G 并返回该副本,而不是直接修改 G

Returns:
Networkx 图

如果 Copy 为 True, 返回一个与 G 类型相同的新图对象( G 保持不变),其中 uv 被识别为一个单一节点。右节点 v 将被合并到节点 u 中,因此返回的图中只会出现 u 。 如果 copy 为 False, 修改 G ,使 uv 被识别为一个单一节点。右节点 v 将被合并到节点 u 中,因此返回的图中只会出现 u

Notes

对于多重图,重定向边的边键可能与旧边的边键不同。这是因为边键在每对节点中仅是唯一的。

对于非多重图,如果 uv 与第三个节点 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)]