NetworkX 2.0#
发布日期:2017年9月20日
添加了对 Python 3.6 的支持,放弃了对 Python 3.3 的支持。
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()
返回一个带有(node, 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') # old >>> nx.minimum_spanning_tree(G, weight='mass') # new
在上面示例中,我们仍然依赖于将函数导入到顶级命名空间。我们目前没有立即弃用这种方法的计划,但我们建议改用以下方式
>>> from networkx.algorithms import tree # recommended >>> 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”中描述。
[#2510 和 #2508] 当指定
target
时,single_source_dijkstra
、multi_source_dijkstra
以及使用这些函数的行为有所改变。不再返回距离和路径的字典,而是返回一个包含(distance, path)
的 2 元组。当未指定target
时,返回值仍然是 2 个字典。[#2553]
set_node_attributes()
和set_edge_attributes()
现在除了接受之前有效的输入形式:{node/edge: value}
和value
外,还接受{node/edge: {name: 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... 的重复关键字参数(#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)
对 in_degree_centrality() 和 out_degree_centrality() 使用 not_implemented_for()(#2084)
问题 2072 加权模块化(#2088)
简化特征向量中心性的实现。(#1708)
Fjmalass 节点作为元组(#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 edgekeys 的问题(#2101)
改进 simplex 及其相关类文档中的“注意”部分。(#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 错误并为布局添加更多测试。(#2141)
添加异常:幂迭代收敛失败(#2143)
微调 HITS 的迭代逻辑(#2142)
修复 PageRank personalize 文档字符串(#2148)
为 dfs_tree 设置默认 source=None(#2149)
修复 maximal_matching 和 tensor_product 的文档(#2158)
在多重图中隔离边键生成(#2150)
将中心性一起排序并外包离散度计算(#2083)
将经典生成器更改为使用生成器而不是列表(#2167)
添加带有示例的波束搜索遍历算法(#2129)
Turan 图(#2172)
从文档字符串中移除不相关的“注意”部分(#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 graph(#2246)
使调和中心性更节省内存(#2247)
使 dag_longest_path_length 返回路径长度,而不是边数(#2237)
在 dag 中添加了 transitive_reduction(#2215)
pylab 标签绘制中未使用 alpha 关键字参数,已在此处添加。(#2269)
让 PyDot 支持重振旗鼓(#2272)
katz_centrality_numpy 中不必要的数组复制?(#2287)
切换到更快的最小最后算法实现。(#2268)
添加获取所有简单边路径的示例。修复 #718(#2260)
移除过时的测试工具。(#2303)
修正 minimum_spanning_arborescence 中的错误(#2285)
在 dfs_labeled_edges 中生成字符串,而不是字典。(#2277)
移除不必要的 convert_to_(un)directed 函数(#2259)
完成多部分图文档(#2221)
修复 LPA 错误,参见 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)
pseudo -> pseudo (修复拼写错误)(#2322)
修正可导航小世界图参数文档(#2321)
修复 find_cycle 中的错误。(#2324)
翻转源目标(#2309)
digitsrep(..) 函数的更简单版本(#2330)
更改 articulation_points 使其每个顶点只返回一次(#2333)
使用更快的随机几何图实现。(#2337)
允许 community asyn_lpa 测试有两个答案(#2339)
修复断开的链接并从 Makefile 中移除 pdf 文件(#2344)
文档化 isom 的可排序节点要求。(#2302)
添加社区模块化度量。(#1729)
简化度序列图生成器。(#1866)
添加树编码和解码函数。(#1874)
修正有向图的 number_of_edges 文档(#2360)
为欧拉环路添加多重图键(#2359)
更新边子图中的前驱/后继(#2373)
修复 #2364 的问题(#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 的问题并修复更多 doctest(#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)
math_dollar 使用 texext(#2609)
添加绘图测试(#2617)
添加阈值测试(#2622)
更新文档(#2623)
准备 beta 版本发布(#2624)
重构 travis 测试并使用 travis 部署文档(#2647)
matplotlib 2.1 弃用了 is_string_like(#2659)
topological_sort, lexicographical_topological_sort(#1662)