relabel_nodes#

relabel_nodes(G, mapping, copy=True)[source]#

根据给定的映射重新标记图 G 的节点。

如果 copyFalse 并且映射包含旧标签和新标签之间的重叠,则可能不会保留原始节点顺序。

参数:
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 加速后端。