pythonnetworkx教程_Python学习教程之networkx

更新时间:2023-06-16 07:48:42 阅读: 评论:0

pythonnetworkx教程_Python学习教程之networkx
networkx是Python的⼀个包,⽤于构建和操作复杂的图结构,提供分析图的算法。图是由顶点、边和可选的属性构成的数据结构,顶点表⽰数据,边是由两个顶点唯⼀确定的,表⽰两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息。
对于networkx创建的⽆向图,允许⼀条边的两个顶点是相同的,即允许出现⾃循环,但是不允许两个顶点之间存在多条边,即出现平⾏边。边和顶点都可以有⾃定义的属性,属性称作边和顶点的数据,每⼀个属性都是⼀个Key:Value对。
⼀,创建图
在创建图之前,需要导⼊networkx模块,通常设置别名为nx;如果创建的图中,顶点之间的边没有⽅向,那么该图称作⽆向图。在创建图时,可以通过help(g)来获得图的帮助⽂档。
import networkx as nx
g=nx.Graph()#创建空的⽆向图
g=nx.DiGraph()#创建空的有向图
⼆,图的顶点
图中的每⼀个顶点Node都有⼀个关键的ID属性,⽤于唯⼀标识⼀个节点,ID属性可以整数或字符类型;顶点除了ID属性之外,还可以⾃定义其他的属性。
1,向图中增加顶点
在向图中增加顶点时,可以⼀次增加⼀个顶点,也可以⼀次性增加多个顶点,顶点的ID属性是必需的。在添加顶点之后,可以通过
g.add_node(1)
g.add_nodes_from([2,3,4])
沙拉酱成分g.nodes()
#NodeView((1, 2,3,4))
在向图中添加顶点时,除ID属性之外,也可以向顶点中增加⾃定义的属性,例如,名称属性,权重属性:
>>> g.add_node(1,name='n1',weight=1)
>>> g.add_node(2,name='n2',weight=1.2)
2,查看顶点的属性
通过属性_node获得图的所有顶点和属性的信息,_node属性返回的是⼀个字典结构,字典的Key属性是顶点的ID属性,Value属性是顶点的其他属性构成的⼀个字典。
>>> g._node
{1: {'name': 'n1', 'weight': 1}, 2: {'name': 'n2', 'weight': 1.2}, 3: {}, 4: {}}
>>&des(data=True)
可以通过顶点的ID属性来查看顶点的其他属性:
>>> g.node[1]
{'name': 'n1', 'weight': 1}
>>> g.node[1]['name']
黏土成分'n1 new'
通过g.nodes(),按照特定的条件来查看顶点:
>>> des(data=True))
[(1, {'time': '5pm'}), (3, {'time': '2pm'})]
3,删除顶点
通过remove函数删除图的顶点,由于顶点的ID属性能够唯⼀标识⼀个顶点,通常删除顶点都需要通过传递ID属性作为参数。
4,更新顶点
更新图的顶点,有两种⽅式,第⼀种⽅式使⽤字典结构的_update函数,第⼆种⽅式是通过索引来设置新值:
>>> g._node[1].update({'name':'n1 new'})
>>> g.node[1]['name']='n1 new'
{1: {'name': 'n1 new', 'weight': 1}, 2: {'name': 'n2', 'weight': 1.2}, 3: {}, 4: {}}
5,删除顶点的属性
使⽤del命令删除顶点的属性
des[1]['room']
6,检查是否存在顶点
检查⼀个顶点是否存在于图中,可以使⽤ n in g⽅式来判断,也可以使⽤函数:
g.has_node(n)
三,图的边
图的边⽤于表⽰两个顶点之间的关系,因此,边是由两个顶点唯⼀确定的。为了表⽰复杂的关系,通常会为边增加⼀个权重weight属性;为了表⽰关系的类型,也会设置为边设置⼀个关系属性。
1,向图中增加边
边是由对应顶点的名称构成的,例如,顶点2和3之间有⼀条边,记作e=(2,3),通过add_edge(node1,node2)向图中添加⼀条边,也可以通过add_edges_from(list)向图中添加多条边;在添加边时,如果顶点不存在,那么networkx会⾃动把相应的顶点加⼊到图中。爱国语句
g.add_edge(2,3)
g.add_edges_from([(1,2),(1,3)])
g.edges()
#EdgeView([(1, 2), (1, 3), (2, 3)])
可以向边中增加属性,例如,权重,关系等:
g.add_edge(1, 2, weight=4.7, relationship='renew')
由于在图中,边的权重weight是⾮常有⽤和常⽤的属性,因此,networkx模块内置以⼀个函数,专门⽤于在添加边时设置边的权重,该函数的参数是三元组,前两个字段是顶点的ID属性,⽤于标识⼀个边,第三个字段是边的权重:
g.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)])
在增加边时,也可以⼀次增加多条边,为不同的边设置不同的属性:
g.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
2,查看边的属性
查看边的属性,就是查看边的数据(data),查看所有边及其属性:
>>> g.edges(data=True)
EdgeDataView([(1, 2, {}), (1, 3, {}), (2, 3, {})])
查看特定的边的信息有两种⽅式:
>>> g[1][2]
>>> g.get_edge_data(1,2)
{'weight': 0.125, 'relationship': 'renew', 'color': 'blue'}
3,删除边
边是两个顶点的ID属性构成的元组,通过edge=(node1,node2) 来标识边,进⽽从图中找到边:
荞麦的作用g.remove_edge(edge)
4,更新边的属性
通过边来更新边的属性,由两种⽅式,⼀种是使⽤update函数,⼀种是通过属性赋值来实现:
g[1][2]['weight'] = 4.7
g.edge[1][2]['weight'] = 4
没关系的英文g[1][2].update({"weight": 4.7})
g.edges[1, 2].update({"weight": 4.7})
5,删除边的属性
通过 del命令来删除边的属性
del g[1][2]['name']
6,检查边是否存在
检查⼀条边是否存在于图中
g.has_edge(1,2)
四,图的属性
图的属性主要是指相邻数据,节点和边。
1,adj
ajd返回的是⼀个AdjacencyView视图,该视图是顶点的相邻的顶点和顶点的属性,⽤于显⽰⽤于存储与顶点相邻的顶点的数据,这是⼀个只读的字典结构,Key是顶点,Value是顶点的属性数据。
>>> g.adj[1][2]
{'weight': 0.125, 'relationship': 'renew', 'color': 'blue'}
>>> g.adj[1]
AtlasView({2: {'weight': 0.125, 'relationship': 'renew', 'color': 'blue'}, 3: {'weight': 0.75}})
2,edges
图的边是由边的两个顶点唯⼀确定的,边还有⼀定的属性,因此,边是由两个顶点和边的属性构成的:
>>> g.edges
EdgeView([(1, 2), (1, 3), (2, 3), (2, 4), (3, 4)])
>>> g.edges.data()
EdgeDataView([(1, 2, {'weight': 0.125, 'relationship': 'renew', 'color': 'blue'}),
(1, 3, {'weight': 0.75}),
(2, 3, {'weight': 8}),
(2, 4, {'weight': 1.2}),
(3, 4, {'weight': 0.375})])
EdgeView仅仅提供边的信息,可以通过属性g.edges或函数g.edges()来获得图的边视图。
EdgeDataView提供图的边和边的属性,可以通过EdgeView对象来调⽤data()函数获得。
3,nodes
图的顶点是顶点和顶点的属性构成的
>>> g.nodes
NodeView((1, 2, 3, 4))
>>> g.nodes.data()
NodeDataView({1: {'name': 'n1 new', 'weight': 1}, 2: {'name': 'n2', 'weight': 1.2}, 3: {}, 4: {}})
NodeView 通过属性g.nodes或函数g.nodes()来获得。
NodeDataView提供图的边和边的属性,可以通过NodeView对象来调⽤data()函数获得。
4,degree
对于⽆向图,顶点的度是指跟顶点相连的边的数量;对于有向图,顶点的图分为⼊度和出度,朝向顶点的边称作⼊度;背向顶点的边称作出度。
通过g.degree 或g.degree()能够获得DegreeView对象,
五,图的遍历
图的遍历是指按照图中各顶点之间的边,从图中的任⼀顶点出发,对图中的所有顶点访问⼀次且只访问⼀次。图的遍历按照优先顺序的不同,通常分为深度优先搜索(DFS)和⼴度优先搜索(BFS)两种⽅式。
1,查看顶点的相邻顶点
查看顶点的相邻顶点,有多种⽅式,例如,以下代码都⽤于返回顶点1的相邻顶点,g[n]表⽰图g中,与顶点n相邻的所有顶点:
g[n]
g.adj[n]
其中,g.neighbors(n)是g.adj[n]的迭代器版本。
2,查看图的相邻
该函数返回顶点n和相邻的节点信息:
>>> for n, nbrs in g.adjacency():
... print(n)
... print(nbrs)
3,图的遍历
深度优先遍历的算法:
⾸先以⼀个未被访问过的顶点作为起始顶点,沿当前顶点的边⾛到未访问过的相邻顶点;
当当前顶点没有未访问过的相邻顶点时,则回到上⼀个顶点,继续试探别的相邻顶点,直到所有的顶点都被访问过。
深度优先遍历算法的思想是:从⼀个顶点出发,⼀条路⾛到底;如果此路⾛不通,就返回上⼀个顶点,继续⾛其他路。
⼴度优先遍历的算法:
从顶点v出发,依次访问v的各个未访问过的相邻顶点;
分别从这些相邻顶点出发依次访问它们的相邻顶点;安卓升级
⼴度优先遍历算法的思想是:以v为起点,按照路径的长度,由近⾄远,依次访问和v有路径相通且路径长度为,n的顶点。
在进⾏图遍历时,需要访问顶点的相邻顶点,这需要⽤到adjacency()函数,例如,g是⼀个⽆向图,n是顶点,nbrs是顶点n的相邻顶点,是⼀个字典结构
for n,nbrs in g.adjacency():
print (n, nbrs)
for nbr,attr in nbrs.items():
# nbr表⽰跟n连接的顶点,attr表⽰这两个点连边的属性集合
小孩子流鼻血是什么原因print(nbr,attr)
六,绘制Graph
使⽤networkx模块draw()函数构造graph,使⽤matplotlib把图显⽰出来:
nx.draw(g)
import matplotlib.pyplot as plt
plt.show()
修改顶点和边的颜⾊:
g = nx.cubical_graph()
nx.draw(g, pos=nx.spectral_layout(g), nodecolor='r', edge_color='b')
plt.show()
高中数学课本完整的⽰例如下⾯的代码所⽰:
from matplotlib import pyplot as plt
import networkx as nx
g=nx.Graph()
g.add_nodes_from([1,2,3])
g.add_edges_from([(1,2),(1,3)])
nx.draw_networkx(g)

本文发布于:2023-06-16 07:48:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1040799.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:顶点   属性   相邻   访问   函数   优先   构成
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图