word完整版python复杂网络分析库NetworkX.docx

上传人:b****8 文档编号:10835623 上传时间:2023-02-23 格式:DOCX 页数:14 大小:138.15KB
下载 相关 举报
word完整版python复杂网络分析库NetworkX.docx_第1页
第1页 / 共14页
word完整版python复杂网络分析库NetworkX.docx_第2页
第2页 / 共14页
word完整版python复杂网络分析库NetworkX.docx_第3页
第3页 / 共14页
word完整版python复杂网络分析库NetworkX.docx_第4页
第4页 / 共14页
word完整版python复杂网络分析库NetworkX.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

word完整版python复杂网络分析库NetworkX.docx

《word完整版python复杂网络分析库NetworkX.docx》由会员分享,可在线阅读,更多相关《word完整版python复杂网络分析库NetworkX.docx(14页珍藏版)》请在冰豆网上搜索。

word完整版python复杂网络分析库NetworkX.docx

word完整版python复杂网络分析库NetworkX

python复杂网络分析库NetworkX

阅读目录

∙无向图

∙有向图

∙加权图

∙经典图论算法计算

∙强连通、弱连通

∙子图

∙条件过滤

∙pred,succ

NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、仿真建模等工作。

networkx支持创建简单无向图、有向图和多重图(multigraph);内置许多标准的图论算法,节点可为任意数据;支持任意的边值维度,功能丰富,简单易用。

引入模块

importnetworkxasnx

printnx

回到顶部

无向图

例1:

#!

-*—coding:

utf8—*-

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.Graph()#建立一个空的无向图G

G。

add_node

(1)#添加一个节点1

G。

add_edge(2,3)#添加一条边2—3(隐含着添加了两个节点2、3)

G.add_edge(3,2)#对于无向图,边3—2与边2—3被认为是一条边

print”nodes:

",G.nodes()#输出全部的节点:

[1,2,3]

print”edges:

",G。

edges()#输出全部的边:

[(2,3)]

print”numberofedges:

”,G。

number_of_edges()#输出边的数量:

1

nx。

draw(G)

plt.savefig("wuxiangtu。

png")

plt。

show()

输出

1

2

3

nodes:

[1,2,3]

edges:

[(2,3)]

numberofedges:

1

例2:

#—*—coding:

utf8—*—

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.DiGraph()

G。

add_node

(1)

G。

add_node

(2)#加点

G。

add_nodes_from([3,4,5,6])#加点集合

G。

add_cycle([1,2,3,4])#加环

G。

add_edge(1,3)

G.add_edges_from([(3,5),(3,6),(6,7)])#加边集合

nx。

draw(G)

plt.savefig(”youxiangtu.png")

plt.show()

回到顶部

有向图

例1:

#!

—*-coding:

utf8-*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

G=nx。

DiGraph()

G。

add_node

(1)

G.add_node

(2)

G。

add_nodes_from([3,4,5,6])

G。

add_cycle([1,2,3,4])

G。

add_edge(1,3)

G.add_edges_from([(3,5),(3,6),(6,7)])

nx.draw(G)

plt.savefig("youxiangtu。

png”)

plt.show()

注:

有向图和无向图可以互相转换,使用函数:

∙Graph.to_undirected()

∙Graph.to_directed()

例2,例子中把有向图转化为无向图:

#!

—*—coding:

utf8—*-

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx.DiGraph()

G。

add_node

(1)

G.add_node

(2)

G。

add_nodes_from([3,4,5,6])

G。

add_cycle([1,2,3,4])

G。

add_edge(1,3)

G.add_edges_from([(3,5),(3,6),(6,7)])

G=G.to_undirected()

nx.draw(G)

plt。

savefig("wuxiangtu。

png")

plt.show()

注意区分以下2例

例3-1

#-*-coding:

utf8-*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

G=nx.DiGraph()

road_nodes={'a’:

1,'b':

2,’c’:

3}

#road_nodes={’a’:

{1:

1},’b':

{2:

2},’c’:

{3:

3}}

road_edges=[('a',’b'),(’b’,'c')]

G。

add_nodes_from(road_nodes。

iteritems())

G.add_edges_from(road_edges)

nx.draw(G)

plt。

savefig(”youxiangtu。

png”)

plt。

show()

例3—2

#-*—coding:

utf8—*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

G=nx。

DiGraph()

#road_nodes={’a’:

1,’b’:

2,’c’:

3}

road_nodes={'a’:

{1:

1},'b':

{2:

2},'c':

{3:

3}}

road_edges=[('a’,’b’),(’b’,’c’)]

G。

add_nodes_from(road_nodes.iteritems())

G.add_edges_from(road_edges)

nx。

draw(G)

plt.savefig(”youxiangtu。

png”)

plt.show()

回到顶部

加权图

有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组[u,v,w]作为参数,其中u是起点,v是终点,w是权重。

例1:

#!

—*-coding:

utf8-*-

importnetworkxasnx

importmatplotlib.pyplotasplt

G=nx。

Graph()#建立一个空的无向图G

G.add_edge(2,3)#添加一条边2—3(隐含着添加了两个节点2、3)

G。

add_weighted_edges_from([(3,4,3。

5),(3,5,7。

0)])#对于无向图,边3—2与边2—3被认为是一条边

 

printG。

get_edge_data(2,3)

printG。

get_edge_data(3,4)

printG.get_edge_data(3,5)

nx。

draw(G)

plt.savefig("wuxiangtu。

png")

plt.show()

输出

{}

{'weight’:

3。

5}

{’weight':

7.0}

 

回到顶部

经典图论算法计算

计算1:

求无向图的任意两点间的最短路径

#—*—coding:

cp936-*—

importnetworkxasnx

importmatplotlib。

pyplotasplt

#计算1:

求无向图的任意两点间的最短路径

G=nx。

Graph()

G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(4,5),(4,6),(5,6)])

path=nx.all_pairs_shortest_path(G)

printpath[1]

计算2:

找图中两个点的最短路径

importnetworkxasnx

G=nx。

Graph()

G.add_nodes_from([1,2,3,4])

G。

add_edge(1,2)

G.add_edge(3,4)

try:

n=nx。

shortest_path_length(G,1,4)

printn

exceptnx。

NetworkXNoPath:

print'Nopath’

回到顶部

强连通、弱连通

∙强连通:

有向图中任意两点v1、v2间存在v1到v2的路径(path)及v2到v1的路径.

∙弱联通:

将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图.如果一个有向图的基图是连通图,则有向图是弱连通图.

距离

例1:

弱连通

#—*—coding:

utf8—*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

#G=nx。

path_graph(4,create_using=nx。

Graph())

#0123

G=nx.path_graph(4,create_using=nx。

DiGraph())#默认生成节点0123,生成有向变0-〉1,1->2,2—〉3

G。

add_path([7,8,3])#生成有向边:

7-〉8-〉3

forcinnx。

weakly_connected_components(G):

printc

print[len(c)forcinsorted(nx.weakly_connected_components(G),key=len,reverse=True)]

nx。

draw(G)

plt。

savefig("youxiangtu。

png”)

plt.show()

执行结果

set([0,1,2,3,7,8])

[6]

例2:

强连通

#-*-coding:

utf8—*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

#G=nx。

path_graph(4,create_using=nx.Graph())

#0123

G=nx.path_graph(4,create_using=nx。

DiGraph())

G.add_path([3,8,1])

#forcinnx。

strongly_connected_components(G):

#printc

#

#print[len(c)forcinsorted(nx.strongly_connected_components(G),key=len,reverse=True)]

 

con=nx.strongly_connected_components(G)

printcon

printtype(con)

printlist(con)

 

nx.draw(G)

plt。

savefig(”youxiangtu。

png")

plt。

show()

执行结果

〈type’generator’〉

[set([8,1,2,3]),set([0])]

回到顶部

子图

#-*—coding:

utf8-*-

importnetworkxasnx

importmatplotlib。

pyplotasplt

G=nx.DiGraph()

G。

add_path([5,6,7,8])

sub_graph=G.subgraph([5,6,8])

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1