网络X 2.0#

上映日期:2017年9月20日

添加了对Python3.6的支持,删除了对Python3.3的支持。

看见 从1.x到2.0的迁移指南

NetworkX是一个用于创建、操作和研究复杂网络的结构、动力学和功能的Python包。

欲了解更多信息,请访问我们的 website 还有我们的 gallery of examples 。请将意见和问题发送到 networkx-discuss mailing list

集锦#

这个版本是两年多工作的结果,1212个承诺和193个合并由86个贡献者。亮点包括:

API更改#

  • 随着Networkx2.0的发布,基础图类也发生了变化,我们将转向一个视图/迭代器报告API。对于图的同一属性,我们曾经有两个方法,一个返回列表,另一个返回迭代器。使用2.0,我们用视图替换了它们。视图是一个只读对象,可以快速创建、自动更新,并在适当的情况下提供基本访问,如迭代、成员资格和设置操作。例如, G.nodes() 用于返回列表和 G.nodes_iter() 迭代器。现在 G.nodes() 返回视图并 G.nodes_iter() 被移除。 G.degree() 返回视图 (node, degree) 迭代,这样 dict(G.degree()) 返回按节点键控的dict,其值为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}
    

    以下方法已更改:

    • 图形/多重图形

      • G.nodes()

      • G.edges()

      • G.neighbors()

      • G.adjacency_list() and G.adjacency_iter() to G.adjacency()

      • G.degree()

      • G.subgraph()

      • G.copy()

      • G.__class__() should be replaced with G.fresh_copy()

    • 有向图/多向图

      • G.nodes()

      • G.edges()

      • G.in_edges()

      • G.out_edges()

      • G.degree()

      • G.in_degree()

      • G.out_degree()

      • G.reverse()

    在将来的版本(3.0?)中,将删除以下不推荐使用的方法。.
    • G.nodeG.edge (替换为G.节点、G.边缘)

    • G.add_pathG.add_cycleG.add_star (现在) nx.add_path(G,...

    • G.selfloop_edgesG.nodes_with_selfloopsG.number_of_selfloops (现在) nx.selfloop_edges(G) 等)

    许多子类都作了相应的更改,例如:
    • AntiGraph

    • Orderedgraph和朋友

    • 例如从图继承的thingraph示例

  • [#2107] 图形类方法 add_edgeadd_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_edgesmaximum_spanning_edgesminimum_spanning_treemaximum_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 关键字参数已从更改为 weightNone . 这会影响以下中心功能:

    • 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: A Competitive and Highly Scalable Community Detection Algorithm" .

  • [#2510 and #2508] single_source_dijkstramulti_source_dijkstra 使用这些函数的函数在 target 指定。而不是返回距离和路径的dict (distance, path) 返回。什么时候? target 未指定返回值仍为2个dict。

  • [#2553] set_node_attributes()set_edge_attributes() 现在接受形状的dict输入的dict {{node/edge: {{name: value}}}} 除了以前的有效输入: {{node/edge: value}}value . 参数的顺序也改变了:第二个参数“values”是值参数,第三个参数“name”是属性的名称。name“有默认值 None 在这种情况下,“values”必须是包含名称的新允许表单。以前“name”排在第二位,而“values”排在第三位。

  • [#2604] 将selfloop方法从基类移到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.nodeG.edge 被移除。它们的功能被替换为 G.nodesG.edges .

  • [#2558] 以前,函数 from_pandas_dataframe 假定数据帧具有边缘列表状结构,但 to_pandas_dataframe 生成邻接矩阵。我们现在提供四种功能 from_pandas_edgelistto_pandas_edgelistfrom_pandas_adjacencyto_pandas_adjacency .

  • [#2620] 远离的 draw_nx 请使用 drawdraw_networkx .

  • [#1662] 重写 topolgical_sort 作为发电机。它不再接受 reversenbunch 而且速度稍微快一点。补充 lexicographical_topological_sort ,它接受一个键。

贬抑#

以下不推荐使用的函数将在2.1中删除。

  • 函数 bellman_ford 已弃用,赞成 bellman_ford_predecessor_and_distance .

  • 功能 to_pandas_dataframefrom_pandas_dataframe 已弃用,赞成 to_pandas_adjacencyfrom_pandas_adjacencyto_pandas_edgelistfrom_pandas_edgelist .

贡献者#

  • 尼尔斯·范阿德里希

  • 凯文阿维

  • 阿里巴哈雷夫

  • 莫里茨·伊曼纽尔·贝伯

  • 利维奥奥布利奥

  • 杰克博格德

  • 莫雷诺·博纳文图拉

  • 拉斐尔·伯恩尼斯克

  • 马太布雷特

  • 杰姆斯克劳

  • 马尔科科涅塔

  • 杰米考克斯

  • 乔恩克拉尔

  • 罗伯特戴维森

  • 尼基尔德赛

  • DonQuixoteDeLaMancha

  • 多恩普芬

  • 艾伦·唐尼

  • 恩里科

  • 詹斯埃拉特

  • 杰弗里芬克尔斯坦

  • 米纳斯格约卡

  • 阿拉文·戈拉科塔

  • 托马斯格兰杰

  • 阿里克·哈格伯格

  • 哈利

  • 雅瓦拉石田

  • 比拉尔·贾玛尔

  • 瑞恩·詹姆斯

  • 奥默卡茨

  • 贾尼斯克莱斯

  • 瓦伦丁·洛伦茨

  • 亚历山德罗罗昂戈

  • 弗朗索瓦·马拉塞内

  • 麦卡锡

  • 迈克尔罗斯

  • 佩莱格米切利

  • 贾罗尔米尔曼

  • 克里斯莫林

  • 桑谷南

  • 尼希恩尼克尔

  • 罗伊诺新星

  • 拉米尔努格曼诺夫

  • 胡安·努内兹·伊格莱西亚斯

  • 皮姆奥特

  • 费兰帕雷

  • 李察彭尼

  • 恐惧症

  • 特里斯坦-普帕德

  • 塞巴斯蒂安·普希洛夫斯基

  • 亚历山大·罗德里格斯

  • 米迦勒·E·罗斯

  • 亚历克斯瑞安

  • 扎卡里赛勒

  • 任_Saitenmacher

  • 费利佩·施耐德

  • 丹舒尔特

  • 辛纳瓦

  • 米迦勒赛弗

  • 穆罕默德·侯赛因·塞哈瓦特

  • 塞思

  • SkyTodInfi

  • 斯泰西斯莫拉什

  • 霍尔迪暴雨

  • 马丁·特恩沃尔

  • 詹尼丝瓦姆瓦斯

  • 卢卡维吉纳

  • 普拉亚格维尔马

  • 彼得威尔斯

  • 伊安托林夕

  • 鹤庆雅

  • 阿利卡西西

  • 切贝7i

  • 确定不确定

  • 杰芬克尔

  • 尤利亚西伯特

  • 莱奥特

  • 莱塞克

  • 麦克格涅塔

  • 努普德

  • 萨洛茨

  • 史葛VSI

  • 格里拉皮波

  • VPODPECAN

  • YASH14123

  • 尼尔吉尔达

合并的请购单#

  • 读取修复。(1962)

  • 1847年(1966年)留下的小变化

  • 修复有向图的k_核心。添加测试(1963)

  • 通讯性修复(1958)

  • 允许最短路径函数(1690)中的权重函数

  • weighted.py上的次要文档更改(1969)

  • 修复最小切边文档。(1977)

  • 修复所有节点切割角情况:循环并完成图形。(1976)

  • 将add_path/star/cycle从方法更改为函数(1970)

  • 分支'edge subgraph'来自@jfinkels(1740)

  • 校正的eppstein匹配(1955)

  • 鼻忽略文档字符串(1980)

  • 编辑了Doc Makefile,这样就不会删除Examples文件夹(1967)

  • convert_matrix.py(1983)中的错误修复

  • 避免在pagerank_numpy(1986)中进行不必要的特征值排序。

  • 在install.rst中修复一个打字错误(1991)

  • 为DAG_最长路径添加无序节点测试。(1999)

  • 改进绘图测试脚本(打字、换行、方法)(1992)

  • 提高*最短路径的测试覆盖率。(1988)

  • 提高平均度连接的测试覆盖率(1987)

  • fix graph()docstring以反映输入灵活性(2006)

  • 修复sphinx自动摘要文档生成错误。(2026)

  • 改进gexf.py(2010)

  • readme.rst应该提到decorator包是必需的。(2009)

  • 修复重复Kwarg:修复导致损坏的重复Kwarg…(2005)

  • 清理graph6和sparse6 I/O的文档(2002)

  • 删除HTTP服务器示例(2001)

  • 推广和改进node_link.py(2000)的文档字符串

  • 修复问题1948和PEP8格式(2031)

  • 对dijkstra_path_length使用权重函数。(2033)

  • 将sphinx的默认角色更改为“obj”(2027)

  • 固定错别字S/Abritary/任意/(2035)

  • 修复dtype值矩阵中的错误(2038)

  • 添加使用graph.nodes()和默认值(2040)的示例

  • 澄清relabel_nodes()的一些示例。(2041)

  • 清除图形电源的代码和文档。(2042)

  • 清除classes.function模块。(2043)

  • 如果使用空图形调用UnboundLocalError(2047)

  • 标准化Bellman-Ford函数调用(1910)

  • IRC中没有人(2059)

  • 在MST测试中使用“从函数添加加权边”。(2061)

  • 添加多源Dijkstra算法(2073)

  • 添加Voronoi细胞算法(2074)

  • 修复了Girvan Newman分区函数的几个问题。修复1703、1725、1799(1972)

  • 移动是从实用程序到简单路径的路径。(1921)

  • 为numpy版本添加max-iter和tol参数(2013)

  • 删除draw_graphviz函数。修复1997(2077)

  • 修复1998边缘加载功能需要文档。(2075)

  • 更新fixcoverage.py(2080)

  • 在近似最小顶点覆盖(2039)中支持有向图

  • 简化函数中贪婪着色的代码。(1680)

  • 允许几何生成器中的任意度量。(1679)

  • 固定单节点图的弹簧布局。(2081)

  • 更新设置节点、边缘属性和文档。(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)

  • 确保文档中的链接 `See also `截面(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)

  • 为最短路径中缺少的源添加异常(2102)

  • 撰写文档现在警告多图表Edgekeys(2101)

  • 改进Simplex和Friends文档的Notes部分。(2104)

  • 为最大流量问题添加Dinitz算法。(1978)

  • 删除了重复的方法/文档(从中添加边)(1)

  • 通用多边缘匹配错误修复(问题2114)(2124)

  • 修正2015。(2)

  • 添加节点,添加边缘属性更改。(2132)

  • Relabel_节点中的句柄图名称属性(2136)

  • 修复fruchterman reingold错误,并向布局添加更多测试。(2141)

  • 添加异常:功率迭代收敛失败(2143)

  • 调整点击的迭代逻辑(2142)

  • 修复pagerank个人化docstring(2148)

  • 为df_树设置默认源=无(2149)

  • 修复最大匹配和张量积(2158)的文档

  • 隔离多重图中的边键生成(2150)

  • 将集中度分类并外包分散度(2083)

  • 将经典生成器改为使用生成器而不是列表(2167)

  • 使用示例(2129)添加波束搜索遍历算法

  • 图兰图(2172)

  • 从docstring中删除不相关的notes节(2178)

  • 更正示例中的对数底数(2179)

  • 文件中的轻微更正(2180)

  • 为最大流量问题添加Boykov-Kolmogorov算法。(2122)

  • 运行测试后删除临时文件。(2202)

  • 在convert_matrix.to_scipy_sparse_matrix中添加对无边子图的支持。(2199)

  • 在readwrite.pajek.parse_pajek中添加对读取邻接矩阵的支持。(2200)

  • 将图形图集移动到数据文件。(2064)

  • 重构Dinitz的算法实现。(2196)

  • 在scipy.linalg.expm()中使用数组而不是矩阵(2208)

  • 使入边等于出边(2206)

  • 修复由于排序问题而失败的测试。(2207)

  • 修复代码转义。(2214)

  • 添加adjlist_outer_dict_factory。(2222)

  • 无标度网络生成器文档中的打字错误(2225)

  • 添加到nx.drawing.layout的链接,而不是提及nx.layout。(2224)

  • 不在教程中工作的示例(2230)

  • 在运行DAG_最长路径(2228)时,不要假设节点是可排序的。

  • 拼写正确(2236)

  • 计算本地效率时使用自我图(2246)

  • 使谐波中心性更具内存效率(2247)

  • 使DAG_最长_路径_长度返回路径长度,而不是边缘计数(2237)

  • 增加了DAG的传递性减少(2215)

  • 阿尔法·夸格在Pylab标签图纸中没有使用,在这里添加了它。(2269)

  • 使Pydot支持再次强大(2272)

  • 不必要的阵列复制在中心位置?(2287)

  • 切换到更快的最小最后一个算法实现。(2268)

  • 添加获取所有简单边缘路径的示例。修复718(2260)

  • 移除过时的测试工具。(2303)

  • 纠正最小跨越树形图中的错误(2285)

  • 在标有“边”的df中生成字符串,而不是dict。(2277)

  • 删除不必要的“转换为”(un)定向函数(2259)

  • 完成多部分图形文档(2221)

  • 修复lpa错误,请参阅问题/2219(2227)

  • 广义度(2220)

  • 图兰医生(2218)

  • 修复到p2g格式描述的断开链接。(2211)

  • 测试顺序(2209)

  • 添加节点权重示例(2250)

  • 添加参数nbunch(2253)

  • 添加用于将dtype与to_numpy_matrix(2257)一起使用的单元测试

  • 添加链分解算法。(2284)

  • 添加Hoffman-Singleton图(2275)

  • 允许网格图生成器接受tuple dim参数(2320)

  • psuedo->pseudo(固定打字)(2322)

  • 更正可导航小世界图形参数文档(2321)

  • 修复find_循环中的错误。(2324)

  • 翻转源目标(2309)

  • digitsrep(..)函数(2330)的简单版本

  • 更改关节点,使其只返回每个顶点一次(2333)

  • 使用更快的随机几何图形实现。(2337)

  • 允许社区asyn-lpa测试有两个答案(2339)

  • 修复断开的链接并从makefile中删除PDF文件(2344)

  • 文档isom的可订购节点要求。(2302)

  • 为社区添加模块化度量。(1729)

  • 简化度序列图生成器。(1866)

  • 添加树编码和解码功能。(1874)

  • 修正定向图的边文档数(2360)

  • 将多图表键添加到欧拉电路(2359)

  • 更新边缘子图中的前置任务/后续任务(2373)

  • 固定到2364(2372)

  • 对bipartite.set(2375)中的断开连接的图引发异常

  • 修复networkxnotimplemented中的拼写错误(2385)

  • 在顶点覆盖中使用迭代的dfs检查交替路径。(2386)

  • 修复在networkx.linalg.graphmatrix.incident_matrix(2395)中生成nxerror的错误。

  • [Fixes #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)

  • 修复了自定义属性用法上的错误:dict的iteritems方法不可用(2461)

  • 修复Sphinx错误和类轮廓(2480)

  • 注意图是有向的和非循环的前提条件(2500)

  • 添加贡献文件(2501)

  • 拆除外部模块(2521)

  • 确保 make html 不会失败,建立在出口()

  • Cherry Pick缺少承诺(2535)

  • 文件发布流程(2539)

  • 更新版权(2551)

  • 删除不推荐使用的代码()

  • 改进文档(2555)

  • WIP:增加说明如何估计alpha(2583)的适当值。

  • Travis重构(2596)

  • 为df创建单独的函数作为边列表和邻接矩阵(2558)

  • 使用texext表示数学美元(2609)

  • 添加图纸测试(2617)

  • 添加阈值测试(2622)

  • 更新文档(2623)

  • 准备β释放(2624)

  • 重构Travis测试并使用Travis部署文档(2647)

  • Matplotlib 2.1不推荐使用类似于字符串的(2659)

  • 拓扑排序,词典编纂拓扑排序(1662)