日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

科學(xué)網(wǎng)—復(fù)雜網(wǎng)絡(luò)分析庫NetworkX學(xué)習(xí)筆記(1):入門

 londonKu 2012-11-19
NetworkX是一個用Python語言開發(fā)的圖論與復(fù)雜網(wǎng)絡(luò)建模工具,內(nèi)置了常用的圖與復(fù)雜網(wǎng)絡(luò)分析算法,可以方便的進行復(fù)雜網(wǎng)絡(luò)數(shù)據(jù)分析、仿真建模等工作。我已經(jīng)用了它一段時間了,感覺還不錯(除了速度有點慢),下面介紹我的一些使用經(jīng)驗,與大家分享。

一、NetworkX及Python開發(fā)環(huán)境的安裝

首先到http://pypi./pypi/networkx/下載networkx-1.1-py2.6.egg,到http:///projects/pywin32/下載pywin32-214.win32-py2.6.exe。如果要用Networkx的制圖功能,還要去下載matplotlib和numpy,地址分別在http:///projects/matplotlib/http:///projects/numpy/files/。注意都要用Python 2.6版本的。

上邊四個包中,pywin32、matplotlib和numpy是exe文件,按提示一路next,比較容易安裝。而NetworkX是個egg文件,安裝稍微麻煩,需要用easyinstall安裝。具體方法:

啟動DOS控制臺(在“運行”里輸入cmd),輸入C:\Python26\Lib\site-packages\easy_install.py C:\networkx-1.1-py2.6.egg,回車后會自動執(zhí)行安裝。注意我是把networkx-1.1-py2.6.egg放到了C盤根目錄,讀者在安裝時應(yīng)該具體根據(jù)情況修改路徑。

安裝完成后,啟動 “開始 - 程序 - ActiveState ActivePython 2.6 (32-bit) - PythonWin Editor”,在shell中輸入:

import networkx as nx
print nx

如果能輸出:

<module 'networkx' from 'C:\Python26\lib\site-packages\networkx-1.1-py2.6.egg\networkx\__init__.pyc'>

說明Networkx已經(jīng)安裝好了,可以正常調(diào)用。

關(guān)于Python語言,如果沒有接觸過可以找一本Python的語法書來看看(推薦《Python 精要參考(第二版)》,網(wǎng)上有電子版)。這個語言很簡單易學(xué),只要有點編程基礎(chǔ),幾天就可以學(xué)會它,然后就可以自如的運用它調(diào)用NetworkX了。


二、建立圖或網(wǎng)絡(luò)

1、無向圖

在PythonWin 的Shell里輸入:

import networkx as nx                            #導(dǎo)入NetworkX包,為了少打幾個字母,將其重命名為nx
G = nx.Graph()                                        #建立一個空的無向圖G
G.add_node(1)                                        #添加一個節(jié)點1
G.add_edge(2,3)                                     #添加一條邊2-3(隱含著添加了兩個節(jié)點2、3)
G.add_edge(3,2)                                     #對于無向圖,邊3-2與邊2-3被認(rèn)為是一條邊
print G.nodes()                                       #輸出全部的節(jié)點: [1, 2, 3]
print G.edges()                                       #輸出全部的邊:[(2, 3)]
print G.number_of_edges()                    #輸出邊的數(shù)量:1

這樣就可以建立一個簡單的無向圖了。如果你的數(shù)據(jù)是存在文件里的,可以循環(huán)從文件中讀取節(jié)點和邊添加到G中。

2、有向圖

有向圖的建立方式和無向圖基本類似,只是在上述代碼的第二行,將G = nx.Graph() 改為 G = nx.DiGraph() 。需要注意的是,此時再添加邊3-2與邊2-3,則被認(rèn)為是兩條不同的邊(可以試著運行上述代碼,自己查看結(jié)果)。

同時,有向圖和無向圖是可以相互轉(zhuǎn)化的,分別用到Graph.to_undirected() 和 Graph.to_directed()兩個方法。

3、加權(quán)圖(網(wǎng)絡(luò))

有向圖和無向圖都可以給邊賦予權(quán)重,用到的方法是add_weighted_edges_from,它接受1個或多個三元組[u,v,w]作為參數(shù),其中u是起點,v是終點,w是權(quán)重。例如:

G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)])

添加0-1和1-2兩條邊,權(quán)重分別是3.0和7.5。

如果想讀取權(quán)重,可以使用get_edge_data方法,它接受兩個參數(shù)u和v,即邊的起訖點。例如:
print G.get_edge_data(1,2)                   #輸出{'weight': 7.5},這是一個字典結(jié)構(gòu),可以查看python語法了解它的用法。

三、調(diào)用圖算法

NetworkX提供了常用的圖論經(jīng)典算法,例如DFS、BFS、最短路、最小生成樹、最大流等等,非常豐富,如果不做復(fù)雜網(wǎng)絡(luò),只作圖論方面的工作,也可以應(yīng)用NetworkX作為基本的開發(fā)包。具體的算法調(diào)用方法我就不一一介紹了,可以瀏覽NX的在線手冊http://networkx./reference/algorithms.html,對每個算法都提供了詳細(xì)的幫助文檔和示例。下面只給出一個最短路算法的例子:

path=nx.all_pairs_shortest_path(G)     #調(diào)用多源最短路徑算法,計算圖G所有節(jié)點間的最短路徑
print path[0][2]                                     #輸出節(jié)點0、2之間的最短路徑序列: [0, 1, 2]

四、小結(jié)

作為NetworkX學(xué)習(xí)筆記的第一部分,今天先簡單介紹下NetworkX的安裝與基本使用方法。后邊有時間會陸續(xù)介紹:用NetworkX進行復(fù)雜網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)統(tǒng)計指標(biāo)計算、典型復(fù)雜網(wǎng)絡(luò)建模(隨機圖、小世界、無標(biāo)度等)以及復(fù)雜網(wǎng)絡(luò)可視化的方法等,請感興趣的朋友關(guān)注并提出批評與意見。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多