python-networkx學習(1)


介紹:

networkx是python的一個庫,它為圖的數據結構提供算法、生成器以及畫圖工具。近日在使用ryu進行最短路徑獲取,可以通過該庫來簡化工作量。該庫采用函數方式進行調用相應的api,其參數類型通常為圖對象。

函數API的調用,按照以下步驟來創建構建圖:

1.networkx的加載

在python中調用networkx通常只需要將該庫導入即可

import networkx as nx

 

2.圖對象的創建

networkx提供了四種基本圖對象:Graph,DiGraph,MultiGraph,MultiDiGraph。

使用如下調用方式,可以創建以上四種圖對象的空圖。

G=nx.Graph()
G=nx.DiGraph()
G=nx.MultiGraph()
G=nx.MultiDiGraph()

在 networkx中,圖的各個節點允許以哈希表對象來表示,而對於圖中邊的各個參量,則可以通過與邊相關聯的方式來標識,一般而言,對於權重,用weight作為keyword,而對於其他的參數,使用者可以采用任何除weight以外的keyword來命名。

3.在2中,創建的只是一副空圖,為了得到一個有節點、有邊的圖,一般采用下面這個函數:

G.add_edge(1,2) #default edge data=1 
G.add_edge(1,2) #specify edge data=0.9

add_edge()函數,該函數在調用時需要傳入兩個參數u和v,以及多個可選參數

u和v即圖中的兩個節點,如果圖中不存在節點,在調用時會自動將這兩個節點添加入內,同時構建兩個節點之間的連接關系,可選參數通常指這條邊的權重等關系參量。需要注意的是,如果圖中已經存在了這條邊,重新進行添加時會對這條邊進行跟新操作(也就是覆蓋了原有的信息)。

對於該函數,除了上述的構建方式以外,還有以下幾種方式來創建邊:

G.add_edge(*e)             # single edge as tuple of two nodes
G.add_edge(1, 3, weight=7, capacity=15, length=342.7)  #using many arguements to create edge
G.add_edges_from( [(1, 2)] ) # add edges from iterable container

  有時候,當采用默認方式創建邊以后,我們可能還會往邊里面添加邊的相關參數,這時候,可以采用下面的方式來更新邊的信息:

#For non-string attribute keys, use subscript notation.
G.add_edge(1, 2)
G[1][2].update({0: 5})     #更新邊的信息
G.edges[1, 2].update({0: 5})  #更新邊的信息
#上述兩種更新方式,擇一選取即可

  細心的朋友可能注意到我在寫創建圖的內容的時候,提到了add_edges_from()函數,該函數也是用來創建邊的,該方式與add_edges()略有不同,比之add_edges()采用一個一個節點的方式進行創建,它來的更為便利。這個函數在調用時,需要一個節點元組作為參數以及多個可選參數作為邊的信息。你可以這么傳遞:

默認創建節點之間的邊:

G.add_edges_from([(u,v)])

 也可以這么寫,在創建的同時添加信息:

G.add_edges_from([(3, 4), (1, 4)], label='WN2898') 

  通過上述方式,就構建了一個3-4-1的圖的連接,並給每條邊打上了標簽。

由此你就可以創建出自己的圖模型了。

 

 

          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM