NetworkX 2.0#
发布日期:2017年9月20日
添加对Python 3.6的支持,不再支持Python 3.3。
查看:从1.x迁移到2.0的迁移指南 。
NetworkX是一个用于创建、操作和研究复杂网络结构、动态和功能的Python包。
更多信息,请访问我们的 网站 和我们的 示例库 。请将评论和问题发送到 networkx-discuss邮件列表 。
亮点#
此版本是由86位贡献者在1212次提交和193次合并的两年多工作的结果。亮点包括:
我们对Multi/Di/Graph类中的方法进行了重大更改。有一个 迁移指南,供从1.X迁移到2.0的用户参考 。
我们更新了文档系统。
API更改#
基本图类更改 随着NetworkX 2.0的发布,我们正在转向视图/迭代器报告API。我们过去针对图的相同属性有两种方法,一种返回列表,一种返回迭代器。在2.0中,我们用视图替换了它们。视图是一个只读对象,创建快速,自动更新,并在适当的情况下提供基本访问,如迭代、成员资格和集合操作。例如,
G.nodes()
过去返回一个列表,G.nodes_iter()
返回一个迭代器。现在G.nodes()
返回一个视图,G.nodes_iter()
被移除。G.degree()
返回一个带有(节点,度)
迭代的视图,因此dict(G.degree())
返回一个以节点为键、度为值的字典。 旧的行为>>> G = nx.complete_graph(5) >>> G.nodes() [0, 1, 2, 3, 4] >>> G.nodes_iter() <dictionary-keyiterator at ...>
已更改为
>>> G = nx.complete_graph(5) >>> G.nodes() NodeView((0, 1, 2, 3, 4)) >>> list(G.nodes()) [0, 1, 2, 3, 4]
新功能包括从视图中查找节点和边数据,无括号的属性访问以及集合操作。
>>> G.add_node(3, color='blue') >>> G.nodes[3] {'color': 'blue'} >>> G.nodes & {3, 4, 5} {3, 4}
以下方法已更改:
Graph/MultiGraph
G.nodes()
G.edges()
G.neighbors()
G.adjacency_list()
和G.adjacency_iter()
改为G.adjacency()
G.degree()
G.subgraph()
G.copy()
G.__class__()
应替换为G.fresh_copy()
DiGraph/MultiDiGraph
G.nodes()
G.edges()
G.in_edges()
G.out_edges()
G.degree()
G.in_degree()
G.out_degree()
G.reverse()
- 以下的弃用方法将在未来的发布版本中被移除(3.0?)。
G.node
,G.edge
(被 G.nodes, G.edges 替代)G.add_path
,G.add_cycle
,G.add_star
(现在是nx.add_path(G,...
)G.selfloop_edges
,G.nodes_with_selfloops
,G.number_of_selfloops
(现在是nx.selfloop_edges(G)
, 等等)
- 许多子类已经相应地进行了更改,比如:
AntiGraph
OrderedGraph 和相关类
例如从 Graph 继承的 ThinGraph 等示例
[ #2107 ] Graph 类的方法
add_edge
和add_edges_from
不再允许使用attr_dict
参数。而是使用关键字参数。 因此G.add_edge(1, 2, {'color': 'red'})
变成了G.add_edge(1, 2, color='red')
。 请注意,这仅在属性名称为字符串时有效。对于非字符串属性,您需要添加边,然后手动更新,例如G.edges[1, 2].update({0: "zero"})
[ #1577 ] 除了最小生成树之外,现在还提供了用于计算最大生成树的新函数。新的 API 包括四个函数:
minimum_spanning_edges
,maximum_spanning_edges
,minimum_spanning_tree
, 和maximum_spanning_tree
。 所有这些函数都接受一个algorithm
参数,用于指定在查找最小或最大生成树时要使用的算法。目前,实现了 Kruskal 和 Prim 算法,分别定义为 ‘kruskal’ 和 ‘prim’。如果未指定任何内容,则使用 Kruskal 算法。 例如,要使用 Kruskal 算法计算图的最大生成树,必须调用函数maximum_spanning_tree
,如下所示:>>> nx.maximum_spanning_tree(G, algorithm='kruskal')
algorithm
参数是新加入的,并出现在现有的weight
参数之前。因此,未明确命名可选的weight
参数的现有代码需要进行更新:>>> nx.minimum_spanning_tree(G, 'mass') # 旧 >>> nx.minimum_spanning_tree(G, weight='mass') # 新
在上述示例中,我们仍然依赖于函数被导入到顶层命名空间中。我们目前没有立即废弃这种方法的计划,但我们建议改用以下方法:
>>> from networkx.algorithms import tree # 推荐 >>> tree.minimum_spanning_tree(G, algorithm='kruskal', weight='mass') >>> tree.minimum_spanning_edges(G, algorithm='prim', weight='mass')
[ #1445 ] 大多数的
shortest_path
算法现在在图中找不到源或目标时会引发NodeNotFound
异常。[ #2326 ] 中心性算法在默认行为方面进行了协调。 权重参数。
weight
关键字参数的默认值已从weight
更改为None
。这影响了以下中心性函数:approximate_current_flow_betweenness_centrality()
current_flow_betweenness_centrality()
current_flow_betweenness_centrality_subset()
current_flow_closeness_centrality()
edge_current_flow_betweenness_centrality()
edge_current_flow_betweenness_centrality_subset()
eigenvector_centrality()
eigenvector_centrality_numpy()
katz_centrality()
katz_centrality_numpy()
[ #2420 ] 提供了新的社区检测算法。Fluid Communities是一种基于流体在环境中相互作用的简单理念的异步算法,它们相互扩展和推动。该算法在《”Fluid Communities: A Competitive and Highly Scalable Community Detection Algorithm” <https://arxiv.org/pdf/1703.09307.pdf>》中完全描述。
[ #2510 和 #2508 ] 当指定
target
时,single_source_dijkstra
、multi_source_dijkstra
和使用这些函数的函数现在具有新的行为。现在返回的不再是距离和路径的字典,而是一个2元组(distance, path)
。当未指定target
时,返回值仍然是2个字典。[ #2553 ]
set_node_attributes()
和set_edge_attributes()
现在接受形状为{node/edge: {name: value}}
的字典输入,除了之前有效的输入形式:{node/edge: value}
和value
。参数的顺序也发生了变化:第二个参数 “values” 是值参数,第三个参数 “name” 是属性的名称。”name” 的默认值现在是None
,在这种情况下,”values” 必须是新允许的形式,包含名称。以前,”name” 没有默认值,排在第二位,”values” 排在第三位。[ #2604 ] 将自环方法从基类移出到networkx函数中。
G.number_of_selfloops()
,G.selfloop_edges()
,G.nodes_with_selfloops()
现在是nx.number_of_selfloops(G)
,nx.selfloop_edges(G)
,nx.nodes_with_selfloops(G)
。G.node
和G.edge
已移除。它们的功能被G.nodes
和G.edges
替代。[ #2558 ] 以前,函数
from_pandas_dataframe
假定数据框具有类似边列表的结构,但to_pandas_dataframe
生成邻接矩阵。现在我们提供四个函数from_pandas_edgelist
,to_pandas_edgelist
,from_pandas_adjacency
, 和to_pandas_adjacency
。[ #2620 ] 已移除
draw_nx
,请使用draw
或draw_networkx
。[ #1662 ] 将
topological_sort
重写为生成器。不再接受reverse
或nbunch
参数,并且速度略有提升。 添加了lexicographical_topological_sort
,可以接受一个键。
弃用内容#
以下弃用函数将在2.1版本中移除。
函数
bellman_ford
已被弃用,推荐使用bellman_ford_predecessor_and_distance
。函数
to_pandas_dataframe
和from_pandas_dataframe
已被弃用,推荐使用to_pandas_adjacency
、from_pandas_adjacency
、to_pandas_edgelist
和from_pandas_edgelist
。
贡献者#
Niels van Adrichem
Kevin Arvai
Ali Baharev
Moritz Emanuel Beber
Livio Bioglio
Jake Bogerd
Moreno Bonaventura
Raphaël Bournhonesque
Matthew Brett
James Clough
Marco Cognetta
Jamie Cox
Jon Crall
Robert Davidson
Nikhil Desai
DonQuixoteDeLaMancha
Dosenpfand
Allen Downey
Enrico
Jens Erat
Jeffrey Finkelstein
Minas Gjoka
Aravind Gollakota
Thomas Grainger
Aric Hagberg
Harry
Yawara ISHIDA
Bilal AL JAMMAL
Ryan James
Omer Katz
Janis Klaise
Valentin Lorentz
Alessandro Luongo
Francois Malassenet
Arya McCarthy
Michael-E-Rose
Peleg Michaeli
Jarrod Millman
Chris Morin
Sanggyu Nam
Nishant Nikhil
Rhile Nova
Ramil Nugmanov
Juan Nunez-Iglesias
Pim Otte
Ferran Parés
Richard Penney
Phobia
Tristan Poupard
Sebastian Pucilowski
Alexander Rodriguez
Michael E. Rose
Alex Ryan
Zachary Sailer
René Saitenmacher
Felipe Schneider
Dan Schult
Scinawa
Michael Seifert
Mohammad Hossein Sekhavat
Mridul Seth
SkyTodInfi
Stacey Smolash
Jordi Torrents
Martin Törnwall
Jannis Vamvas
Luca Verginer
Prayag Verma
Peter Wills
Ianto Lin Xi
Heqing Ya
aryamccarthy
chebee7i
definitelyuncertain
jfinkels
juliensiebert
leotrs
leycec
mcognetta
numpde
root
salotz
scott-vsi
thegreathippo
vpodpecan
yash14123
Neil Girdhar
已合并的PR#
修复Gml读取问题。(#1962)
来自#1847的小更改遗留问题 (#1966)
修复有向图的k_core。添加测试 (#1963)
通信性修复 (#1958)
允许最短路径函数中的权重函数 (#1690)
weighted.py中的微小文档更改 (#1969)
修复minimum_st_edge_cut文档。 (#1977)
修复all_node_cuts边缘情况:循环和完全图。 (#1976)
将add_path/star/cycle从方法更改为函数 (#1970)
从@jfinkels的’edge-subgraph’分支 (#1740)
修正了eppstein匹配 (#1955)
Nose忽略文档字符串 (#1980)
编辑Doc Makefile以便clean不删除examples文件夹 (#1967)
convert_matrix.py中的错误修复 (#1983)
避免在pagerank_numpy中不必要的特征值排序 (#1986)
修复install.rst中的拼写错误 (#1991)
为dag_longest_path添加了不可排序节点测试。 (#1999)
改进绘图测试脚本(拼写错误,换行,方法)。 (#1992)
改进A*最短路径的测试覆盖率。 (#1988)
改进平均度连接性的测试覆盖率。 (#1987)
修复Graph()文档字符串以反映输入的灵活性。 (#2006)
修复sphinx autosummary文档生成错误。 (#2026)
改进gexf.py (#2010)
Readme.rst应提到需要Decorator包。 (#2009)
fix_duplicate_kwarg: 修复导致to_agraph…的重复kwarg。 (#2005)
清理graph6和sparse6 I/O的文档。 (#2002)
删除http服务器示例 (#2001)
泛化和改进node_link.py的文档字符串。 (#2000)
修复问题#1948和PEP8格式化 (#2031)
使用权重函数进行dijkstra_path_length。 (#2033)
将sphinx的默认角色更改为’obj’ (#2027)
修正拼写错误s/abritrary/arbitrary/ (#2035)
修复dtype值矩阵中的错误。 (#2038)
添加使用Graph.nodes()的示例,默认情况下。 (#2040)
澄清relabel_nodes()的一些示例。 (#2041)
清理图幂的代码和文档。 (#2042)
清理classes.function模块。 (#2043)
如果使用空图调用,则会出现UnboundLocalError (#2047)
标准化Bellman-Ford函数调用 (#1910)
IRC中没有人 (#2059)
在MST测试中使用add_weighted_edges_from函数。 (#2061)
添加多源Dijkstra算法 (#2073)
添加Voronoi单元算法 (#2074)
修复Girvan-Newman分区函数的几个问题。 修复#1703,#1725,#1799 (#1972)
将is_path从utils移动到simple_paths。 (#1921)
为numpy版本添加max_iter和tol参数 (#2013)
删除draw_graphviz函数。 修复#1997 (#2077)
修复#1998 edge_load函数需要文档。 (#2075)
更新fixcoverage.py (#2080)
在近似最小顶点覆盖中支持有向图 (#2039)
简化贪婪着色函数中的代码。 (#1680)
允许几何生成器中的任意度量。 (#1679)
修复单节点图的spring_layout。 (#2081)
更新set_{node,edge}_attributes和文档。 (#1935)
修复最大匹配的测试。 (#1919)
为社区添加LFM基准图生成器 (#1727)
添加全局和局部效率函数。 (#1521)
对单个节点应用alphas (#1289)
时态VF2的代码和测试 (#1653)
将gexf.py和graphml.py中的convert_bool扩展到所有有效的布尔值 (#1063)
将编码的…转换为纯ASCII (#2086)
使用not_implemented_for()处理in_degree_centrality()和out_degree_centrality() (#2084)
问题2072加权模块度 (#2088)
简化特征向量中心性的实现。 (#1708)
将节点作为元组处理 (#2089)
生成器重命名 (#2090)
确保文档中的链接在```另请参阅```部分中 (#2082)
文档整数型数值混合 (#2085)
修复sphinx错误 (#2091)
更正另请参阅链接 (#2095)
调整layout.py函数签名,文档,暴露 (#2096)
添加缺少的__all__属性。 (#2098)
修复支配前沿代码中的2个错误 (#2092)
创建了两个新文件:joint_degree_seq.py 和 test_joint_degree_seq.… (#2011)
添加了 Borůvka 的最小生成树算法。 (#1873)
添加了全局/局部到达中心性函数。 (#2099)
从 #1894 中移除冲突 (更新异常类) (#2100)
为 shortest_path 中缺少源的情况添加异常 (#2102)
compose 现在在文档中警告关于 MultiGraph 边键 (#2101)
改进 simplex 和相关文档中的 Notes 部分。 (#2104)
添加了 Dinitz 的最大流问题算法。 (#1978)
移除了重复的方法/文档 (add_edges_from) (#1)
修复了 generic_multiedge_match 的错误 (问题 #2114) (#2124)
修复了 2015 年的问题。 (#2)
add_node, add_edge attr_dict 改变。 (#2132)
在 relabel_nodes 中处理图名称属性 (#2136)
修复了 fruchterman reingold 的错误并为 layouts 添加更多测试。 (#2141)
添加了异常:失败的幂迭代收敛 (#2143)
调整了 HITS 的迭代逻辑 (#2142)
修复了 PageRank personalize 的文档字符串 (#2148)
为 dfs_tree 设置默认源为 None (#2149)
修复了 maximal_matching 和 tensor_product 的文档 (#2158)
在多重图中隔离边键生成 (#2150)
将中心性排序在一起并外包离散度 (#2083)
将经典生成器更改为使用生成器而不是列表 (#2167)
添加了带有示例的 beam search 遍历算法 (#2129)
Turan 图 (#2172)
从文档字符串中删除无关的 Notes 部分 (#2178)
修正了示例中的对数基数 (#2179)
文档中的微小更正 (#2180)
为最大流问题添加了 Boykov Kolmogorov 算法。 (#2122)
运行测试后删除临时文件。 (#2202)
在 convert_matrix.to_scipy_sparse_matrix 中添加对没有边的子图的支持。 (#2199)
在 readwrite.pajek.parse_pajek 中添加读取邻接矩阵的支持。 (#2200)
将 Graph Atlas 移动到数据文件中。 (#2064)
重构了 Dinitz 算法的实现。 (#2196)
在 scipy.linalg.expm() 中使用数组而不是矩阵 (#2208)
使 in_edges 等同于 out_edges (#2206)
修复由于排序问题导致的测试失败。 (#2207)
修复代码转义。 (#2214)
添加 adjlist_outer_dict_factory。 (#2222)
在无标度网络生成器文档中的拼写错误 (#2225)
添加到 nx.drawing.layout 的链接,而不是提到 nx.layout。 (#2224)
教程中的示例无效 (#2230)
运行 dag_longest_path 时不要假设节点是可排序的 (#2228)
修正拼写错误 (#2236)
在计算局部效率时使用 ego 图 (#2246)
使 harmonic centrality 更节省内存 (#2247)
使 dag_longest_path_length 返回路径长度,而不是边数 (#2237)
在 dag 中添加了 transitive_reduction (#2215)
pylab 标签绘制中未使用 alpha kwarg,此处添加。 (#2269)
使 PyDot 再次支持良好 (#2272)
katz_centrality_numpy 中不必要的数组复制? (#2287)
切换到更快的 smallest-last 算法实现。 (#2268)
添加了获取所有简单边路径的示例。修复 #718 (#2260)
移除过时的测试工具。(#2303)
修正minimum_spanning_arborescence中的错误。(#2285)
在dfs_labeled_edges中产生字符串,而不是字典。(#2277)
移除不必要的convert_to_(un)directed函数。(#2259)
完善multipartite图文档。(#2221)
修复LPA bug,参见issues/2219。(#2227)
广义度量。(#2220)
Turan文档。(#2218)
修复到P2G格式描述的链接错误。(#2211)
测试排序。(#2209)
添加节点权重的示例。(#2250)
添加参数nbunch。(#2253)
为使用dtype与to_numpy_matrix添加单元测试。(#2257)
添加链分解算法。(#2284)
添加Hoffman-Singleton图。(#2275)
允许grid_graph生成器接受元组dim参数。(#2320)
伪->伪(修正拼写错误)。(#2322)
修正可导航小世界图参数文档。(#2321)
修复find_cycle中的bug。(#2324)
翻转源目标。(#2309)
更简单的digitsrep(..)函数版本。(#2330)
更改articulation_points,使其仅返回每个顶点一次。(#2333)
使用更快的随机几何图实现。(#2337)
允许community asyn_lpa测试有两个答案。(#2339)
修复损坏的链接并从Makefile中删除pdf文件。(#2344)
为isom文档排序节点要求。(#2302)
为社区添加模块度度量。(#1729)
简化度序列图生成器。(#1866)
添加树编码和解码函数。(#1874)
修正有向图的number_of_edges文档。(#2360)
为Eulerian circuits添加多图键。(#2359)
在边子图中更新predecessors/successors。(#2373)
修复#2364中的bug。(#2372)
对于不连通的图,在bipartite.sets中引发异常。(#2375)
修复NetworkXNotImplemented中的拼写错误。(#2385)
在to_vertex_cover中使用迭代DFS检查交替路径。(#2386)
修复networkx.linalg.graphmatrix.incidence_matrix中生成NXError的拼写错误。(#2395)
[修复#2342]移除对plt.hold()的调用,mpl2.0中已弃用。(#2397)
修复损坏的链接。(#2414)
为3.6修复所有测试。(#2413)
改进二部图文档。(#2402)
修正GEXFWriter中的逻辑。(#2399)
在setup.py中列出可选依赖项。(#2398)
Gitwash更新。(#2371)
添加cytoscape JSON处理。(#2351)
修复问题#2328和#2332。(#2366)
在travis中为gdal python3.6提供解决方法以及更多doctests修复。(#2416)
修复自定义attrs使用中的错误:字典没有iteritems方法。(#2461)
修复sphinx错误和类大纲。(#2480)
注意图是有向且无环的前提条件。(#2500)
添加CONTRIBUTE文件。(#2501)
移除外部模块。(#2521)
确保
make html
在退出时不会构建失败。(#2530)挑选缺失的提交。(#2535)
文档发布流程。(#2539)
更新版权。(#2551)
移除已弃用的代码。(#2536)
改进文档。(#2555)
WIP:添加如何估计alpha适当值的说明。(#2583)
Travis重构。(#2596)
为df作为边列表和邻接矩阵创建单独的函数。(#2558)
使用texext进行数学公式的美元符号 (#2609)
添加绘图测试 (#2617)
添加阈值测试 (#2622)
更新文档 (#2623)
准备 beta 版本发布 (#2624)
重构 travis 测试并使用 travis 部署文档 (#2647)
matplotlib 2.1 已弃用 is_string_like (#2659)
topological_sort, lexicographical_topological_sort (#1662)