當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python NetworkX relabel_nodes用法及代碼示例


本文簡要介紹 networkx.relabel.relabel_nodes 的用法。

用法:

relabel_nodes(G, mapping, copy=True)

根據給定的映射重新標記圖 G 的節點。

參數

G圖形

NetworkX 圖

mapping字典

以舊標簽為鍵,新標簽為值的字典。允許部分映射。允許將 2 個節點映射到單個節點。映射中的任何非節點鍵都將被忽略。

copy布爾(可選,默認=真)

如果 True 返回一個副本,或者如果 False 重新標記節點。

注意

隻有映射中指定的節點才會被重新標記。映射中的任何非節點鍵都將被忽略。

關鍵字設置 copy=False 會修改圖形。 Relabel_nodes 通過從指定重新標記順序的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'}}}

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.relabel.relabel_nodes。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。