亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python學習4-NetworkX的使用

2019-11-06 06:48:17
字體:
來源:轉載
供稿:網友

創建簡單的空圖形(沒有邊和點)

import networkx as nxg = nx.Graph();h = nx.Graph( g); #可以在構建Graph對象時指定值來構造一個新的Graph對象f = nx.Graph( [ (1,2),(2,3),(1,3)]); #可以在構建Graph對象時指定node關系的數組來構建Graph對象根據定義,一個Graph就是一個所有nodes的集合。在NetworkX中,nodes能夠代表任何對象,例如一個文本,一個圖片,一個xml對象或者另外一個Graph,一個自定義的對象等等。

由于NetworkX提供了多種Graph對象生成方法,并且體痛了讀寫方法來讀寫多種格式,所以Graph對象能夠使用多種方式創建。


Nodes

graph對象能夠添加node(節點)g.add_node(1); #添加一個節點 g.add_nodes_from( [2,3]) #添加一個節點列表h = nx.path_graph(10)g.add_nodes_from( h) #添加一個能夠迭代的集合(例如:list, set, graph, file等等),這樣g中包含了h中的元素g.add_node( h) #這是將h作為一個node添加到g中g.add_nodes_from( 'span'); #將span拆分為一個字符數組,然后添加nodeNote: 最后,h是一個graph對象,將h最為g的node,是一個很靈活的特性。這樣節點可以是graph中的graph,files中的graphs,method中的graph等等。值得思考的是,如果結構化你的應用使得那些node都是有用的實體。如果你愿意,你還可以是g對應一個唯一的表示,每個node對應一個被表示的key。如果node對應的是對象中的內容,那么當內容變化是,不應該修改對象,應該修改node對應的內容(有點繞)。

Edges

graph對象中還能夠添加edges(邊);g.add_edge(1,2) # 添加一個1和2之間的edgee=(2,3) #定義個關系g.add_edge( *e) #添加關系對象g.add_edges_from([(1,2),(2,3)]) #添加一個edge數組g.add_edges_from( h.edges()); #h.edges()返回的h的包含所有edge的數組#拆除graph對象中的node和edge可以使用如下方法g.remove_node()g.remove_nodes_from()g.remove_edge()g.remove_edges_from()#刪除所有的node和edgeg.clear();#如果重復添加相同的node和edge,NetworkX將會將會忽略那些重復的內容。g.add_nodes_from("span");g.add_node( "s");#獲取一個Graph對象中node和edge的數量g.number_of_nodes();g.number_of_edges();#獲取一個Graph對象中的node數組或者edge數組g.nodes();g.edges();g.neighbors(1); #獲取與node為1相鄰的node是節點g.remove_edge( 1,2); #刪除node1和node2之間的edge,自此node1和node2不再為相鄰的node

如何使用nodes和edges?

獲取你已經注意到了node和edge并不是Graph的對象。這就能夠使你更加靈活的使用node和edge,如果在python中使用string和number。node可以為任何hashable對象(除了Node),edge還可以和其他Graph對象中的node建立關聯。例如: g.add_node( n1, n2, Graph=x); 例如,n1,n2可以代表生物蛋白質資料庫中兩種蛋白質對象,x可以是代表一個觀察實驗出版物中的xml片段記錄。 如果熟悉他們,那么他們會非常有用。如果濫用也會帶來意想不到的結果。如有疑問可以通過convert_node_labels_to_integers()方法來獲得更多的有整數組成的傳統圖形。

除了使用上面提到的方法外,可以使用索引下標來訪問edge

g[1] {2,{}} g[1][1] {} Note:不要修改返回到額字典結構,它是graph固有的一部分,直接修改會導致不一致的狀態 同樣通過下標可以設置edge的屬性 g.add_edge( 1, 3) g[1][1][ “color”] = “blue” 通過迭代快速查找所有的edge FG=nx.Graph() FG.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)]) for n,nbrs in FG.adjacency_iter(): … for nbr,eattr in nbrs.items(): … data=eattr[‘weight’] … if data<0.5: PRint(‘(%d, %d, %.3f)’ % (n,nbr,data)) (1, 2, 0.125) (2, 1, 0.125) (3, 4, 0.375) (4, 3, 0.375)


添加graph,node,edge的屬性

像color,label,weight或者其他Python對象的屬性都可以被設置為graph,node,edge的屬性。 每個graph,node,edge都能夠包含key/value這樣的字典數據。默認情況下是沒有這些屬性的??梢酝ㄟ^add_node(),add_edge(),或者直接修改來添加和修改屬性。 Graph 屬性 g = nx.Graph( day="friday"); g.graph 打?。海癲ay”:“friday”} g.graph["day"]="Monday"; g.graph 打?。海?day":"Monday"} Node屬性 通過add_node(),add_nodes_from或者g.node來添加屬性 g.add_node( 1, time="5pm"); g.add_nodes_from([3], time="2pm"); g.node[ 1] 打?。海?time":"5pm"} g.node[1]["room"]=714; g.nodes(data=True); 打?。篬(1,{"room":714, "time":"5pm"}),(3,{"time":"2pm"})] Note:向node添加屬性并不會想graph添加屬性, Edge屬性 通過add_edge(), add_edges_from()或者g.edge來添加屬性 g.add_edge(1,2,wegiht=4.7) g.add_edges_from( [ (2,3),(3,4) ], color="red") g.add_edges_from( [(1,2,{"color":"blue"}),(4,5,{"weight":8})]) g[1][2]["width"]=4.7 g.edge[1][2]["weight"]=4

Directed graphs(有向圖)

DiGraph類針對有向edge提供了另外的方法,例如:out_edges(), in_degree(),predecessors(),successors()等。為了是算法能夠正常運行,有向版本的neighbors()和degree()對于seccessor()方法是相同的。in_degree()和out_degree()都是獨自的。 ig = nx.DiGraph() ig.add_wieghted_edges_from( [(1,2,0.5),(2,3,0.7)]) ig.out_degree( 1,weight="weight"); 打?。?.5 ig.degree( 1, weight="weight"); 打印:1.25 ig.seccessors(1) 打印:[2] ig.neighbors(1) 打印:[2] 一些算法只對有向grapsh起作用,其他算法沒有明確定義。同時使用有向graph和無向graph是非常危險的事情。如果想將有向graph轉換為無向graph可以使用 Graph.to_undirected() 或者 h = nx.Graph( g)

Multigraphs

NetworkX提供了類來實現一對node之間存在多個edge的實現類:MultiGraph和MultiDiGraph,他們都允許使用的edge數據添加多個的edge。對于某些應這個特性非常有用,但是很多算法在這種graph中并沒有明確定義。

MG=nx.MultiGraph() MG.add_weighted_edges_from([(1,2,.5), (1,2,.75), (2,3,.5)]) MG.degree(weight=’weight’) {1: 1.25, 2: 1.75, 3: 0.5} GG=nx.Graph() for n,nbrs in MG.adjacency_iter(): … for nbr,edict in nbrs.items(): … minvalue=min([d[‘weight’] for d in edict.values()]) … GG.add_edge(n,nbr, weight = minvalue) … nx.shortest_path(GG,1,3) [1, 2, 3]


Graph generators and graph Operations(圖形生成和操作)

為了構建node-by-node或者edge-by-edge的graph,還可以使用以下方式。 subgraph( G, nbunch) union( g1,g2) #合并praph disjoint_union( g1, g2) #假設所有node都不相同合并praph cartesian_product( g1, g2) #返回笛卡爾產品praph compose( g1, g2) #合并公共的node complement( g1) #praph的補集 create_empty_copy( g) #返回某個praph對象的空的拷貝對象 convert_to_undirected( g) #返回一個無向praph convert_to_directed( g) #返回一個有向的praph 使用小圖的調用 petersen = nx.petersen_parph(); tutte = nx.tutte_praph() maze = nx.sedgewick_maze_praph() tet = nx.tetrahedral_praph() 使用典型praph的構造生成器 k_4 = nx.complete_graph(4); k_3_5 = nx.complete_bipartite_graph(3,5) barbell = nx.barbell_graph( 10, 10) lollipop = nx.lollipop_graph( 10,20); 使用隨機graph生成器er=nx.erdos_renyi_graph(100,0.15)ws=nx.watts_strogatz_graph(30,3,0.1)ba=nx.barabasi_albert_graph(100,5)red=nx.random_lobster(100,0.9,0.9)

從存儲praph的文件中讀取格式數據然后生成praph。

nx.write_gml(red,"path.to.file") mygraph=nx.read_gml("path.to.file")----------Drawing Praphs(繪制圖形) NetworkX并不是首選的圖形繪制包,但是它包含了基本的圖形繪制工具開源包Matplotlib。如果需要的話可以引入network.drawing包。(更詳細的文檔參考:Drawing) 注意: NetworkX中的繪圖包不和Python3兼容 首先引入 Matplotlib的plot接口 import matplotlib.pyplot as plt 如果成功引入 networkx.drawing那么可以使用下面的方法繪制graph對象 nx.draw( g) nx.draw_random( g) nx.draw_circular( g) nx.draw_spectral( g) 將繪制的內容保存的一個文件中使用下面的方法 nx.draw( g) plt.savefig( "path.png")
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美一区二区白浆黑人| 国产香蕉一区二区三区在线视频| 国内精品国产三级国产在线专| 日韩av电影免费观看高清| 国产精品普通话| 久久久国产精品亚洲一区| 久久久久久久久久亚洲| 欧美成人免费在线视频| 青青久久av北条麻妃海外网| 精品日本高清在线播放| 米奇精品一区二区三区在线观看| 日韩欧美主播在线| 亚洲精品国产精品久久清纯直播| 欧美精品在线第一页| 国产精选久久久久久| 亚洲欧洲日产国码av系列天堂| 国产日韩精品在线| 色哟哟亚洲精品一区二区| 国产精品日韩欧美综合| 久久这里只有精品99| 少妇精69xxtheporn| 欧美一区二区大胆人体摄影专业网站| 色青青草原桃花久久综合| 精品自拍视频在线观看| 2021国产精品视频| 中文国产亚洲喷潮| 亚洲天堂成人在线| 九九视频直播综合网| 午夜精品久久久久久久男人的天堂| 国产精品久久久久久久久免费| 亚洲欧美中文日韩在线| 红桃av永久久久| 91综合免费在线| 国产日韩欧美另类| 亚洲已满18点击进入在线看片| 日本久久精品视频| 成人字幕网zmw| 日韩成人在线电影网| 欧美日韩国产123| 亚洲精美色品网站| 欧美日韩午夜激情| 91免费高清视频| 欧美日韩视频免费播放| 欧美日韩福利视频| 成人黄色av播放免费| 日韩精品视频三区| 久久久久久久香蕉网| 欧美精品电影免费在线观看| 亚洲人成电影网站色www| 日韩美女中文字幕| 久久精品国产亚洲精品2020| 欧美日韩国产一区二区| 国产精品午夜一区二区欲梦| 日韩中文在线中文网在线观看| 亚洲字幕一区二区| 九九热精品视频| 韩国精品美女www爽爽爽视频| 国产不卡av在线免费观看| 午夜精品一区二区三区在线视| 激情亚洲一区二区三区四区| 91在线精品视频| 国产精品88a∨| 国产精品扒开腿爽爽爽视频| 在线精品国产成人综合| 91视频九色网站| 91精品国产综合久久香蕉922| 亚洲资源在线看| 国产精品一区二区久久| 欧美巨猛xxxx猛交黑人97人| 国产不卡精品视男人的天堂| 日韩电影在线观看永久视频免费网站| 亚洲第一免费网站| 69久久夜色精品国产69| 热re91久久精品国99热蜜臀| 亚洲一区二区三区sesese| 4438全国亚洲精品在线观看视频| 国产精品爽黄69| 日韩精品在线电影| 国产精品欧美日韩| 2019日本中文字幕| 欧美黑人又粗大| 日韩在线精品一区| 97免费视频在线| 欧美高清不卡在线| 亚洲性猛交xxxxwww| 国产欧美一区二区三区视频| 色99之美女主播在线视频| 久久久亚洲成人| 久久久精品视频成人| 国产亚洲日本欧美韩国| 91精品久久久久| 国色天香2019中文字幕在线观看| 日韩视频在线免费观看| 久久伊人免费视频| 精品国产91久久久| 国产91精品视频在线观看| 日韩精品免费在线| 国产亚洲免费的视频看| 精品中文视频在线| 亚洲第一黄色网| 91精品视频在线看| 最近2019中文字幕mv免费看| 成人高清视频观看www| 欧美性生交大片免费| 最新国产精品亚洲| 日韩三级影视基地| 色狠狠av一区二区三区香蕉蜜桃| 欧美日韩亚洲激情| 欧美影院成年免费版| 日韩av在线不卡| 国产精品永久免费| 日韩亚洲精品视频| 91久久在线播放| 欧美老女人www| 91亚洲精品在线观看| 欧美超级乱淫片喷水| 国产精品久久电影观看| 琪琪亚洲精品午夜在线| 久99久在线视频| 欧美午夜视频一区二区| 国产成人一区二区三区小说| 日本道色综合久久影院| 亚洲片av在线| 日韩在线视频中文字幕| 97视频免费在线观看| 欧美成人精品在线观看| 91chinesevideo永久地址| 欧美日韩激情网| 国产精品色悠悠| 欧美在线www| 日韩在线一区二区三区免费视频| 亚洲欧美一区二区精品久久久| 国产中文字幕日韩| 欧美日韩激情小视频| 久久久91精品国产| 日韩a**中文字幕| 亚洲精品中文字| 亚洲福利视频二区| 久久成人国产精品| 国产精品扒开腿爽爽爽视频| 欧美性精品220| 国产日韩中文在线| 韩国福利视频一区| 国产欧美在线看| www.日韩免费| 国产精品久久久久91| 亚洲人成电影网站色xx| 97视频在线观看免费高清完整版在线观看| 国产福利精品av综合导导航| 欧美日韩加勒比精品一区| 国产一区二区日韩精品欧美精品| 国产69久久精品成人| 欧美精品日韩www.p站| 国产不卡在线观看| 欧美日韩国产综合新一区| 中文字幕精品一区二区精品| 成人精品视频在线| 精品国产欧美成人夜夜嗨| 日韩欧美国产一区二区| 久久精品国产91精品亚洲| 亚洲日韩中文字幕在线播放| 日韩中文字幕久久| 国产精品免费电影| 欧美激情xxxx|