网络X 0.99#

上映日期:2008年11月18日

请参阅:https://networkx.lanl.gov/trac/timeline

新功能#

此版本对图形API的部分部分进行了重大更改。请参阅http://networkx.lanl.gov/reference/api_changes.html

  • 更新Graph和DiGraph类以使用加权图作为API的默认更改,以实现性能和代码简单性。

  • 新的多重图类和多重有向图类(取代XGraph和XDiGraph)

  • 更新以使用Sphinx文档系统http://networkx.lanl.gov/

  • 开发人员网站:https://networkx.lanl.gov/trac/

  • 实验标号图和标号有向图

  • 已将包和文件布局移到子目录。

错误修复#

  • HANDLE ROOT=正确绘制_graph viz的选项

实例#

  • 更新以使用networkx-0.99 API

  • 绘图示例现在使用matplotlib.pyploy接口

  • 在许多示例中改进了图纸

  • 新示例-请参阅http://networkx.lanl.gov/examples/

networkx-0.99是networkx-1.0之前的倒数第二个版本。我们将版本从0.37提高到0.99,以表明(在我们不寻常的版本号方案中)这是对NetworkX的一个重大更改。

为了提高性能、功能和清晰度,我们对NetworkX进行了一些重要的更改,详情如下。

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

请将评论和问题发送到Networkx讨论邮件列表。http://groups.google.com/group/networkx-discussion

基类中的更改#

最重要的变化是在图形类中。我们重新设计了graph()和digraph()类,可以选择允许边缘数据。这种变化允许图和有向图自然地表示加权图,并在边上保存任意信息。

  • graph和digraph都接受一个可选的参数weighted=true false。当weighted=true时,假设图具有数值边缘数据(默认值为1)。早期版本中的graph和digraph类将python none用作数据(仍允许将其用作边缘数据)。

  • 图形和有向图类现在允许自循环。

  • Xgraph和Xdigraph类被删除,并替换为多图表和多图表。多图表和多图表可选地允许两个节点之间的平行(多)边。

从旧类到新类的映射如下:

- Graph -> Graph (self loops allowed now, default edge data is 1)
- DiGraph -> DiGraph (self loops allowed now, default edge data is 1)
- XGraph(multiedges=False) -> Graph
- XGraph(multiedges=True) -> MultiGraph
- XDiGraph(multiedges=False) -> DiGraph
- XDiGraph(multiedges=True) -> MultiDiGraph

改变方法#

EDGE()#

new keyword data=true false keyword决定是返回两个元组(u,v)(false)还是三个元组(u,v,d)(true)

DeleTeNo.NoDe()#

首选名称现在是remove_node()。

从()中删除节点#

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

DeleTeEdGe()#

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

从()中删除边#

首选名称现在是remove_edges_from()。

ADDIGEDGE()#

add_edge()方法不再直接接受边元组(u,v)。元组必须解包到各个节点中。

>>> import networkx as nx
>>> u='a'
>>> v='b'
>>> e=(u,v)
>>> G=nx.Graph()

旧的

>>> # G.add_edge((u,v))  # or G.add_edge(e)

新的

>>> G.add_edge(*e) # or G.add_edge(*(u,v))

*运算符解包参数列表中的边元组。

添加边缘现在有一个数据关键字参数用于设置默认(数据=1)边缘数据。

>>> # G.add_edge('a','b','foo')  # add edge with string "foo" as data
>>> # G.add_edge(1,2,5.0)  # add edge with float 5 as data

从()添加边#

现在可以使用2元组(u,v),3元组(u,v,data)的列表或迭代器,或者两者的混合。

现在有了data关键字参数(默认值1),用于设置边缘列表中任何2元组边缘的边缘数据。

HasyEdGe()#

has_edge()方法不再直接接受边元组(u,v)。元组必须解包到各个节点中。

旧的:

>>> # G.has_edge((u,v))  # or has_edge(e)

新的:

>>> G.has_edge(*e) # or has_edge(*(u,v))
True

*运算符解包参数列表中的边元组。

GETIGEDGE()#

现在有了关键字参数“default”来指定如果找不到边缘,返回的值。如果未指定,则在未找到边缘时引发异常。

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

极限迭代()#

degree-iter方法现在返回(node,degree)对上的迭代器。这是degree iter以前的行为(带有labels=true),还有一个新的关键字weighted=false true用于weighted degree。

子图()#

参数inplace=false_true已替换为copy=true_false。

子图不再使用关键字创建。要更改图形类型,请先复制图形,然后更改类型,或者更改类型并生成子图形。例如。

>>> G=nx.path_graph(5)
>>> H=nx.DiGraph(G.subgraph([0,1])) # digraph of copy of induced subgraph

γ-GeTimeTh()#

使用g从图中获取节点邻居 [v] 现在返回字典。

>>> G=nx.path_graph(5)
>>> # G[0]
#  {1: 1}

要获取邻居列表,您可以使用该字典的键或使用

>>> G.neighbors(0)  
[1]

这种变化允许算法通过g使用dict表示的基础dict。 [v] 以获得实质性的性能提升。警告:不应修改返回的字典,因为它可能损坏图形数据结构。抄G [v] .copy()如果要修改dict。

去除方法#

信息()#

现在函数

>>> G=nx.Graph(name='test me')
>>> nx.info(G)  
Name:                  test me
Type:                  Graph
Number of nodes:       0
Number of edges:       0

NoDeId边界()#

现在函数

EdgEi边界()#

现在函数

ISX指令()#

使用定向属性

>>> G=nx.DiGraph()
>>> # G.directed
#  True

G.OutEXEDGE()#

使用G.EdgEs()

G.In EngEs()#

使用

>>> G = nx.DiGraph()
>>> R = G.reverse()
>>> R.edges()  
[]

>>> [(v,u) for (u,v) in G.edges()]
[]

添加方法#

邻接表(#

返回图表的列表邻接列表表示形式。

邻接矩阵#

返回(node,adjacency)dict的迭代器 [node] )覆盖图中的所有节点。用于快速访问内部数据结构以用于内部算法。

其他可能与现有代码不兼容的地方#

进口#

一些代码模块被移到子目录中。

导入语句,例如:

import networkx.centrality
from networkx.centrality import *

可能不再有效(包括那个例子)。

要么使用

>>> import networkx # e.g. centrality functions available as networkx.fcn()

>>> from networkx import * # e.g. centrality functions available as fcn()

自循环#

对于图和有向图,现在允许使用自循环。这可能会影响添加要忽略的自循环的代码或算法。

使用方法

  • 节点_与_SelfLoops()。

  • 自循环边(

  • 自循环数

发现任何自我循环。

拷贝#

networkx图的副本(包括使用copy()方法)现在返回该图的完整副本。这意味着复制了所有连接信息——副本中的后续更改不会更改旧图形。但是原始图和复制图中的节点键和边缘数据是指向相同数据的指针。

prepare_nbunch#

内部使用-现在称为nbunch-iter并返回迭代器。

将旧代码转换为0.99版本#

大多数情况下,您只需运行代码,而python将为更改的特性引发异常。改变的常见地方是

  • 将xgraph()转换为graph或multigraph

  • 将xgraph.edges()转换为graph.edges(data=true)

  • 将一些很少使用的方法切换到属性(如定向)或函数(如节点边界)

  • 如果您依赖于旧的默认边缘数据为“无”,则必须将其解释为“1”。

您可能还需要查看代码中可以提高速度或可读性的地方。迭代器有助于处理大型图形并通过g获取边缘数据。 [u] [v] 相当快。您还可以将g.neighbors(n)更改为g。 [n] 它将邻居节点键入的dict返回到边缘数据。它在许多方面都更快,但在更改图形时却不能很好地工作。