relabel_nodes#
- relabel_nodes(G, mapping, copy=True)[source]#
根据给定的映射重新标记图 G 的节点。
如果
copy
为False
并且映射包含旧标签和新标签之间的重叠,则可能不会保留原始节点顺序。- 参数:
- G图
一个 NetworkX 图
- mapping字典
一个以旧标签为键、新标签为值的字典。允许部分映射。允许将 2 个节点映射到单个节点。映射中任何非节点键都将被忽略。
- copy布尔值 (可选,默认为 True)
如果为 True,则返回一个副本;如果为 False,则原地重新标记节点。
注意
只有映射中指定的节点会被重新标记。映射中任何非节点键都将被忽略。
关键字设置 copy=False 会原地修改图。Relabel_nodes 通过从
mapping
构建一个有向图来避免命名冲突,该有向图指定了重新标记的顺序。命名冲突(例如 a->b, b->c)被排序,以便在 "a" 被重命名为 "b" 之前,"b" 被重命名为 "c"。在循环映射(例如 a->b, b->a)的情况下,无法原地修改图,并且会引发异常。在这种情况下,请使用 copy=True。如果在多重图上进行重新标记操作会导致两个或多个边的源、目标和键相同,则必须为第二个边分配一个新的键以保留所有边。新键被设置为在这两个节点之间尚未用作键的最小非负整数。请注意,这意味着非数字键可能会被数字键替换。
示例
根据给定字典创建节点重新标记的新图
>>> G = nx.path_graph(3) >>> sorted(G) [0, 1, 2] >>> mapping = {0: "a", 1: "b", 2: "c"} >>> H = nx.relabel_nodes(G, mapping) >>> sorted(H) ['a', 'b', 'c']
节点可以使用任何可哈希对象重新标记,包括数字和字符串
>>> import string >>> G = nx.path_graph(26) # nodes are integers 0 through 25 >>> sorted(G)[:3] [0, 1, 2] >>> mapping = dict(zip(G, string.ascii_lowercase)) >>> G = nx.relabel_nodes(G, mapping) # nodes are characters a through z >>> sorted(G)[:3] ['a', 'b', 'c'] >>> mapping = dict(zip(G, range(1, 27))) >>> G = nx.relabel_nodes(G, mapping) # nodes are integers 1 through 26 >>> sorted(G)[:3] [1, 2, 3]
要执行部分原地重新标记,请提供一个仅映射节点子集的字典,并将
copy
关键字参数设置为 False>>> G = nx.path_graph(3) # nodes 0-1-2 >>> mapping = {0: "a", 1: "b"} # 0->'a' and 1->'b' >>> G = nx.relabel_nodes(G, mapping, copy=False) >>> sorted(G, key=str) [2, 'a', 'b']
映射也可以作为函数提供
>>> G = nx.path_graph(3) >>> H = nx.relabel_nodes(G, lambda x: x**2) >>> list(H) [0, 1, 4]
在多重图中,将两个或多个节点重新标记为同一个新节点将保留所有边,但在此过程中可能会改变边的键
>>> G = nx.MultiGraph() >>> G.add_edge(0, 1, value="a") # returns the key for this edge 0 >>> G.add_edge(0, 2, value="b") 0 >>> G.add_edge(0, 3, value="c") 0 >>> mapping = {1: 4, 2: 4, 3: 4} >>> H = nx.relabel_nodes(G, mapping, copy=True) >>> print(H[0]) {4: {0: {'value': 'a'}, 1: {'value': 'b'}, 2: {'value': 'c'}}}
这对原地重新标记也有效
>>> G = nx.relabel_nodes(G, mapping, copy=False) >>> print(G[0]) {4: {0: {'value': 'a'}, 1: {'value': 'b'}, 2: {'value': 'c'}}} ----
其他后端也实现了此函数
cugraph : GPU 加速后端。