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[build] 标签,其中 major 和 minor 是数字,[build] 是一个标签,例如“dev1379”表示开发版本,或“rc1”表示发布候选版本。
我们计划更紧密地遵循基于时间的发布计划,大约每季度发布一次较小的增量更改。图类 API 将保持固定,除非我们确定现有类中存在严重错误或其他缺陷,直到将来某个时候发布 networkx-2.0。
基类的更改#
最重要的更改在于图类。现在所有的图类都允许可选的图、节点和边属性。这些属性在图类内部以字典的形式存储,并且在大多数情况下可以像 Python 字典一样简单地访问。
图属性#
每个图都在成员 G.graph 中保留一个 key=value 属性字典。可以直接使用 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()、MultiGraph()、MultiDiGraph()#
现在在初始化时可以接受可选的 keyword=value 属性。
>>> G=nx.Graph(year='2009',city='New York')
add_node()#
现在可以接受可选的 keyword=value 属性或一个属性字典。
>>> G.add_node(1,room=714)
add_nodes_from()#
现在可以接受可选的 keyword=value 属性或一个应用于所有受影响节点的属性字典。
>>> G.add_nodes_from([1,2],time='2pm') # all nodes have same attribute
add_edge()#
现在可以接受可选的 keyword=value 属性或一个属性字典。
>>> G.add_edge(1, 2, weight=4.7 )
add_edges_from()#
现在可以接受可选的 keyword=value 属性或一个应用于所有受影响边的属性字典。
>>> G.add_edges_from([(3,4),(4,5)], color='red') >>> G.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])
nodes() 和 nodes_iter()#
新的 data=True|False 关键字参数决定是否返回带有节点属性字典的二元组 (n,dict) (True)
>>> G=nx.Graph([(1,2),(3,4)]) >>> G.nodes(data=True) [(1, {}), (2, {}), (3, {}), (4, {})]
copy()#
现在返回图的深拷贝(复制节点和边的所有底层数据和属性)。使用类初始化器进行浅拷贝
>>> 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
subgraph()#
当 copy=True 时,现在返回图的深拷贝(复制节点和边的所有底层数据和属性)。
>>> G = nx.Graph() >>> # note: copy keyword deprecated in networkx>1.0 >>> # H = G.subgraph([],copy=True) # deep copy of all data
add_cycle()、add_path()、add_star()#
现在可以接受可选的 keyword=value 属性或一个属性字典,这些属性应用于受方法影响的所有边。
>>> G = nx.Graph() >>> G.add_path([0, 1, 2, 3], width=3.2)
移除的方法#
delete_node()#
推荐的名称现在是 remove_node()。
delete_nodes_from()#
尝试删除图中不存在的节点时不再引发异常。推荐的名称现在是 remove_nodes_from()。
delete_edge()#
尝试删除图中不存在的边时现在会引发异常。推荐的名称现在是 remove_edge()。
delete_edges_from()#
推荐的名称现在是 remove_edges_from()。
has_neighbor()
使用 has_edge()
get_edge()#
已重命名为 get_edge_data()。返回边属性字典。
获取边 (u,v) 数据最快的方法是使用 G[u][v] 而不是 G.get_edge_data(u,v)
移除的成员#
directed, multigraph, weighted#
使用方法 G.is_directed() 和 G.is_multigraph()。如果图中在“weight”边属性中有数值,则现在所有图都是加权图。
添加的方法#
add_weighted edges_from()#
使用由 3 元组 (u,v,weight) 组成的列表向图中添加加权边的便捷方法。
get_edge_data()#
从 get_edge() 重命名而来。
获取边 (u,v) 数据最快的方法是使用 G[u][v] 而不是 G.get_edge_data(u,v)
is_directed()#
替换了成员 G.directed
is_multigraph()#
替换了成员 G.multigraph
移除的类#
LabeledGraph, LabeledDiGraph#
这些类已被合并到常规类中。
UbiGraph#
已移除,因为不再支持 ubigraph 平台。
附加函数/生成器#
ego_graph, stochastic_graph, PageRank 算法, HITS 算法, GraphML 写入器, freeze, is_frozen, 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.get_edge(u,v) 替换为 G[u][v][‘weight’]。
获取分配或未分配权重键的图的权重的一种常用写法是
>>> w= G[1][2].get('weight',1) # set w to 1 if there is no 'weight' key