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()#
现在在初始化时接受可选的关键字=值属性。
>>> G=nx.Graph(year='2009',city='New York')
add_node()#
现在接受可选的关键字=值属性或属性字典。
>>> G.add_node(1,room=714)
add_nodes_from()#
现在接受可选的关键字=值属性或应用于所有受影响节点的属性字典。
>>> G.add_nodes_from([1,2],time='2pm') # 所有节点具有相同属性
add_edge()#
现在接受可选的关键字=值属性或属性字典。
>>> G.add_edge(1, 2, weight=4.7 )
add_edges_from()#
现在接受可选的关键字=值属性或应用于所有受影响边的属性字典。
>>> 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)
copy()#
现在返回图的深层副本(复制所有节点和边的基础数据和属性)。使用类初始化程序进行浅层副本:
>>> G=nx.Graph() >>> G_shallow=nx.Graph(G) # 浅层副本 >>> G_deep=G.copy() # 深层副本
to_directed() 和 to_undirected()#
现在返回图的深层副本(复制所有节点和边的基础数据和属性)。使用类初始化程序进行浅层副本:
>>> G = nx.Graph() >>> D_shallow = nx.DiGraph(G) # 浅层副本 >>> D_deep = G.to_directed() # 深层副本
subgraph()#
现在使用 copy=True 返回图的深层副本(复制所有节点和边的基础数据和属性)。
>>> G = nx.Graph() >>> # 注意:在networkx>1.0中,copy关键字已弃用 >>> # H = G.subgraph([],copy=True) # 所有数据的深层副本
add_cycle(), add_path(), add_star()#
现在接受可选的关键字=值属性或应用于方法影响的所有边的属性字典。
>>> 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) # 添加带有权重的边1-2
>>> G[1][2]['weight']=2.3 # 将权重设置为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) # 如果没有’weight’键,则将w设置为1