NetworkX 1.0#

上映日期:2010年1月8日

1.0版需要python 2.4或更高版本。

新功能#

此版本对图形API的某些部分进行了重大更改,以允许使用图形、节点和边属性。请参阅http://networkx.lanl.gov/reference/api_changes.html

  • 更新Graph、DiGraph和Multigraph类以允许属性。

  • 默认边缘数据现在是空词典(原来是整数1)

  • 差运算符和交运算符

  • 平均最短路径

  • A*(A-Star)算法

  • PageRank、Hits和特征向量中心性

  • 阅读Pajek文件

  • 折线图

  • 最小生成树(Kruskal算法)

  • 密集和稀疏Fruchterman-Reingold布局

  • 随机聚类图生成器

  • 有向无标度图生成器

  • 更快的随机正则图生成器

  • 使用Matplotlib改进了边缘颜色和标签绘制

  • 更多信息,请访问https://networkx.lanl.gov/trac/query?status=closed&group=milestone&milestone=networkx-1.0

实例#

  • 更新以使用networkx-1.0 API

  • 图子类示例

版本编号#

将来我们将使用更标准的版本编号系统major.minor [建造] 主要和次要是数字的标签 [建造] 是一个标签,如“dev1379”表示开发版本,或“rc1”表示发布候选。

我们计划更接近基于时间的发布时间表,在大约每季度的基础上发布较小的增量更改。图形类API将保持不变,除非我们确定现有类中存在严重的错误或其他缺陷,直到将来某个时候释放networkx-2.0。

基类中的更改#

中最显著的变化是在图形类中。所有的图形类现在都允许可选的图形、节点和边缘属性。这些属性作为字典存储在图形类内部,在大多数情况下,可以像Python字典一样简单地访问它们。

图形属性#

每个图都在成员g.graph中保存键=值属性的字典。可以使用g.graph直接访问这些属性,也可以使用关键字参数在实例化时添加这些属性。

>>> G=nx.Graph(region='Africa')
>>> G.graph['color']='green'
>>> G.graph
{'region': 'Africa', 'color': 'green'}

节点属性#

每个节点都有相应的属性字典。向节点添加属性是可选的。

使用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'})]

边缘属性#

每个边都有相应的属性字典。默认的边缘数据现在是一个空的属性字典,向边缘添加属性是可选的。

一个常见的用例是向边添加权重属性:

>>> G.add_edge(1,2,weight=3.14159)

使用add_edge()、add_edges_from()、下标符号或g.edge添加边缘属性。

>>> G.add_edge(1, 2, weight=4.7 )
>>> G.add_edges_from([(3,4),(4,5)], color='red')
>>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
>>> G[1][2]['weight'] = 4.7
>>> G.edge[1][2]['weight'] = 4  

改变方法#

graph(),digraph(),multipgraph(),multipgraph())#

现在在初始化时采用可选的关键字=值属性。

>>> G=nx.Graph(year='2009',city='New York')

AddioNoDube()#

现在接受可选的关键字=值属性或属性字典。

>>> G.add_node(1,room=714)

从()添加节点#

现在接受可选的关键字=值属性或应用于所有受影响节点的属性字典。

>>> G.add_nodes_from([1,2],time='2pm')  # all nodes have same attribute

ADDIGEDGE()#

现在接受可选的关键字=值属性或属性字典。

>>> G.add_edge(1, 2, weight=4.7 )

从()添加边#

现在采用可选的关键字=值属性或应用于所有受影响边的属性字典。

>>> G.add_edges_from([(3,4),(4,5)], color='red')
>>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])

节点()和节点()。#

new keyword data=true false keyword决定是否使用节点属性字典返回两个元组(n,dict)(true)

>>> G=nx.Graph([(1,2),(3,4)])
>>> G.nodes(data=True)  
[(1, {}), (2, {}), (3, {}), (4, {})]

复制()#

现在返回图形的深度副本(复制节点和边的所有基础数据和属性)。使用类初始值设定项进行浅复制:

>>> G=nx.Graph()
>>> G_shallow=nx.Graph(G) # shallow copy
>>> G_deep=G.copy() # deep copy

to_directed(),to_undirected())#

现在返回图形的深度副本(复制节点和边的所有基础数据和属性)。使用类初始值设定项进行浅复制:

>>> G = nx.Graph()
>>> D_shallow = nx.DiGraph(G) # shallow copy
>>> D_deep = G.to_directed() # deep copy

子图()#

如果copy=true,现在返回图形的深度副本(复制节点和边的所有基础数据和属性)。

>>> G = nx.Graph()
>>> # note: copy keyword deprecated in networkx>1.0
>>> # H = G.subgraph([],copy=True)  # deep copy of all data

添加_cycle(),添加_path(),添加_star())#

现在取可选的关键字=值属性或应用于受方法影响的所有边的属性字典。

>>> G = nx.Graph()
>>> G.add_path([0, 1, 2, 3], width=3.2)  

去除方法#

DeleTeNo.NoDe()#

首选名称现在是remove_node()。

从()中删除节点#

不再在尝试删除不在图中的节点时引发异常。首选名称现在是remove_nodes_from()。

DeleTeEdGe()#

现在在尝试删除不在图中的边时引发异常。首选名称现在是remove_edge()。

从()中删除边#

首选名称现在是remove_edges_from()。

HasxBuffel.():

使用HasyEdGe()

GETIGEDGE()#

已重命名以获取_edge_data()。返回边缘属性字典。

获取边缘数据(u,v)的最快方法是使用g [u] [v] 而不是获取边缘数据(U,V)

删除成员#

有向、多重图、加权#

使用方法g.is_directed()和g.is_multigraph()。如果在“weight”边缘属性中有数值,则所有图现在都是加权图。

添加方法#

从()添加加权边#

使用3元组(u,v,weight)列表向图形添加加权边的方便方法。

GETYEDEGEDATA()#

已从get_edge()重命名。

获取边缘数据(u,v)的最快方法是使用g [u] [v] 而不是获取边缘数据(U,V)

ISX指令()#

替换G.directed成员

ISX多重图()#

替换成员g.multigraph

移除类#

贴标图、贴标图#

这些班已被分成普通班。

UbiGraph#

移除,因为不再支持Ubigraph平台。

附加功能/发电机#

自我图,随机图,pagerank算法,hits算法,图形编写器,冻结,被冻结,A*算法,定向无标度发生器,随机聚类图。

将现有代码转换为networkx-1.0#

加权边#

边缘信息现在存储在属性字典中,因此所有边缘数据都必须有一个键来标识它。

目前只有一个标准/保留键“weight”,由使用加权边的算法和函数使用。关联值应为数字。所有其他键可供用户根据需要分配。

>>> G=nx.Graph()
>>> G.add_edge(1,2,weight=3.1415) # add the edge 1-2 with a weight
>>> G[1][2]['weight']=2.3 # set the weight to 2.3

同样,对于直接访问边缘数据,使用边缘数据的键来检索它。

>>> w = G[1][2]['weight']

所有需要/使用加权边缘的NetworkX算法现在都使用“weight”边缘属性。如果现有算法假定边缘数据为数字,则应替换G [u] [v] 和g.用g得到边(u,v) [u] [v] [“重量”] .

有或没有指定权重键的图的权重习语是

>>> w= G[1][2].get('weight',1)  # set w to 1 if there is no 'weight' key