我有一個多圖形對象,並希望將其轉換爲具有加權邊的簡單圖形對象。我查看了networkx文檔,似乎無法找到實現此功能的內置函數。我只是想知道是否有人知道networkx中的內置函數可以實現這個目標。我查看了to_directed(),to_undirected()函數,但它們不符合我的目標。Networkx:將多幅圖轉換爲具有加權邊的簡單圖形
10
A
回答
14
這裏是由權重相加,以創建加權多圖加權圖的一種方法:
import networkx as nx
# weighted MultiGraph
M = nx.MultiGraph()
M.add_edge(1,2,weight=7)
M.add_edge(1,2,weight=19)
M.add_edge(2,3,weight=42)
# create weighted graph from M
G = nx.Graph()
for u,v,data in M.edges(data=True):
w = data['weight'] if 'weight' in data else 1.0
if G.has_edge(u,v):
G[u][v]['weight'] += w
else:
G.add_edge(u, v, weight=w)
print(G.edges(data=True))
# [(1, 2, {'weight': 26}), (2, 3, {'weight': 42})]
+0
這是一個很好的解決方案,幾乎正是我所期待的,除了我的MultiGraph在邊緣沒有「重量」屬性。我建議對你的代碼進行小小的更新,所以如果沒有這樣的屬性,它將權重默認爲1.0。 – 2017-02-13 13:33:49
-3
您可以使用igraph庫。從這裏下載python擴展模塊: http://igraph.sourceforge.net/download.html
10
這樣做的一個非常簡單的方法就是將多個圖作爲輸入傳遞給Graph
。
import networkx as nx
G = nx.MultiGraph()
G.add_nodes_from([1,2,3])
G.add_edges_from([(1, 2), (1, 2), (1, 3), (2, 3), (2, 3)])
G2 = nx.Graph(G)
這將創建多圖的無向圖,其中多條邊合併爲單條邊。但是,如果您對合並邊緣有不同的屬性,我不知道是否有任何方法來確定保留哪個屬性。
+0
知道MultiGraph可以很容易地轉換成圖形是非常有用的,但它不能解決OP對加權邊緣的要求。 – TheEspinosa 2017-07-19 15:07:31
相關問題
- 1. 將具有簡單形狀的圖像轉換爲多邊形
- 2. 將具有孔的多邊形轉換爲無孔的多個簡單多邊形
- 3. 將多邊形轉換爲多邊形
- 4. 將折線轉換爲具有寬度的多邊形形狀
- 5. 如何將多點圖轉換爲Networkx中的無定向圖?
- 6. NetworkX:翻轉圖形
- 7. 如何將圖片/地圖轉換爲GoogleMaps多邊形?
- 8. 有沒有簡單的方法將autocad多邊形轉換爲adobe swf格式?
- 9. NetworkX DiGraph()以圖形()的邊緣權重不加總和,如何加權?
- 10. 將python-igraph圖轉換爲networkx
- 11. JavaFX:將矩形轉換爲多邊形
- 12. 將多邊形轉換爲三角形
- 13. 帶有加權邊的圖形繪製
- 14. 將簡單多邊形的輪廓樣條輪廓線轉換成簡單的多邊形
- 15. 將地圖上的點轉換爲多邊形
- 16. 將MySQL中的WKT多邊形轉換爲Google Maps多邊形
- 17. NetworkX轉換多重圖以簡單圖表通過平均平行長度
- 18. 將簡單圖像轉換爲灰度
- 19. NetworkX:將邊緣添加到節點屬性的圖形中
- 20. 如何將一組多邊形轉換爲位圖
- 21. 將XML多邊形轉換爲Google地圖
- 22. javafx將多邊形轉換爲區域
- 23. 將像素轉換爲多邊形
- 24. 將線條轉換爲多邊形
- 25. OpenCv將圓圈轉換爲多邊形
- 26. 將路徑轉換爲多邊形
- 27. 將多邊形轉換爲網格
- 28. 將SVG多邊形轉換爲路徑
- 29. Codeigniter單幅圖像轉換成多幅調整
- 30. networkx:具有一致節點放置的多個圖形
是否有多重圖加權邊緣?如果是這樣,你是否想要以某種方式組合來自並行邊的權重來構建圖? – Aric 2013-03-23 23:41:43
是的,就是這樣的情況。 – anonuser0428 2013-03-23 23:56:39