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