relabel_nodes#

relabel_nodes(G, mapping, copy=True)[源代码]#

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

参数
G图表

网络X图表

mapping词典

以旧标签为关键字,以新标签为值的词典。允许部分映射。允许将2个节点映射到单个节点。映射中的任何非节点键都将被忽略。

copy布尔值(可选,默认为True)

如果为True,则返回副本;如果为False,则重新标记节点。

笔记

只有映射中指定的节点将被重新标记。映射中的任何非节点键都将被忽略。

关键字设置copy=false将就地修改图形。Relabel_节点通过从 mapping 它指定了重新标记的顺序。命名冲突,如a->b,b->c,按顺序排列,使“b”在“a”被重命名为“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'}}}