网络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个贡献者。亮点包括:
我们对Multi/Di/Graph类中的方法进行了重大更改。有一个 migration guide for people moving from 1.X to 2.0 。
我们更新了文件系统。
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()
andG.adjacency_iter()
toG.adjacency()
G.degree()
G.subgraph()
G.copy()
G.__class__()
should be replaced withG.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.node
,G.edge
(替换为G.节点、G.边缘)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和朋友
例如从图继承的thingraph示例
[#2107] 图形类方法
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: A Competitive and Highly Scalable Community Detection Algorithm" .
[#2510 and #2508]
single_source_dijkstra
,multi_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.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] 重写
topolgical_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
.
贡献者#
尼尔斯·范阿德里希
凯文阿维
阿里巴哈雷夫
莫里茨·伊曼纽尔·贝伯
利维奥奥布利奥
杰克博格德
莫雷诺·博纳文图拉
拉斐尔·伯恩尼斯克
马太布雷特
杰姆斯克劳
马尔科科涅塔
杰米考克斯
乔恩克拉尔
罗伯特戴维森
尼基尔德赛
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)