2017-10-06 57 views
0

我正在嘗試處理wiki-Vote.txt(https://snap.stanford.edu/data/wiki-Vote.html)中給出的圖形。有7115個節點的id範圍從3到8297.我想重新標記節點從0到7114.我檢查了relabel_nodes()中的映射,但仍然無法解決問題。請建議。感謝重新標記網絡x中圖形的節點

+0

這是什麼問題?它如何體現? (當你試圖檢查'relabel_nodes()'中的映射時發生了什麼?)你對此做出了什麼嘗試? 如果這是一個家庭/課程練習,如果你指出它會很感激。 – zyndor

+0

映射似乎是明確指定的或爲連續範圍定義的。如何爲我的情況定義映射?它不是功課。謝謝。 –

+0

你有什麼試過的?我不確定你的意思是什麼:「我檢查了relabel_nodes()中的映射,但仍然無法解決問題。」 – Joel

回答

1

給定圖G一些節點集,最簡單的事情將是

mapping = {old_label:new_label for new_label, old_label in enumerate(G.nodes())} 
H = nx.relabel_nodes(G, mapping) 

這將創建一個字典mapping的鍵是舊標籤,值是他們的新標籤(閱讀了關於dictionary comprehensions)。新標籤的排序順序爲G.nodes()返回值(您無法控制)。新圖H已更改節點標籤。

如果你想要一個特定的訂單,你需要適當地對G.nodes()進行排序。所以你可以做

nodelist = G.nodes() 
nodelist.sort() 
mapping = {old_label:new_label for new_label, old_label in enumerate(G.nodes())} 
H = nx.relabel_nodes(G, mapping) 

這將他們按數字順序排序(或字母順序,如果節點名稱是字符串)。如果你想要一些其他的自定義命令,你必須弄清楚如何對nodelist進行排序。