复杂网络分析库NetworkX学习笔记.docx

上传人:牧羊曲112 文档编号:5089685 上传时间:2023-06-03 格式:DOCX 页数:33 大小:167.53KB
返回 下载 相关 举报
复杂网络分析库NetworkX学习笔记.docx_第1页
第1页 / 共33页
复杂网络分析库NetworkX学习笔记.docx_第2页
第2页 / 共33页
复杂网络分析库NetworkX学习笔记.docx_第3页
第3页 / 共33页
复杂网络分析库NetworkX学习笔记.docx_第4页
第4页 / 共33页
复杂网络分析库NetworkX学习笔记.docx_第5页
第5页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《复杂网络分析库NetworkX学习笔记.docx》由会员分享,可在线阅读,更多相关《复杂网络分析库NetworkX学习笔记.docx(33页珍藏版)》请在三一办公上搜索。

1、复杂网络分析库NetworkX学习笔记(1):入门NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置 了常用的图与复杂网络分析算法,可以方便的进行复杂网络数据分析、 仿真建模等工作。我已经用了它一段时间了,感觉还不错(除了速度有 点慢),下面介绍我的一些使用经验,与大家分享。一、NetworkX及Python开发环境的安装首 先 到 http:/pypi.python.org/pypi/networkx/ 下 载 networkx-1.1-py2.6.egg,至U 下载 pywin32-214.win32-py2.6.exe。如果要用 Networkx 的制图功能, 还

2、要去下载 matplotlib 和 numpy, 地址分别在 和 Python 2.6 版 本的。上边四个包中,pywin32、matplotlib和numpy是exe文件,按提示一 路next,比较容易安装。而NetworkX是个egg文件,安装稍微麻烦, 需要用easyinstall安装。具体方法:启动 DOS 控制台(在“运行”里输入cmd ),输入 C:Python26Libsite-packageseasy_install.pyC:networkx-1.1-py2.6.egg,回车后会自动执行安装。注意我是把 networkx-1.1-py2.6.egg放到了 C盘根目录,读者在安装

3、时应该具体根据情况修改路径。安装完成后,启动“开始-程序-ActiveState ActivePython 2.6 (32-bit) -PythonWin Editor”,在 shell 中输入:import networkx as nxprint nx如果能输出:说明Networkx已经安装好了,可以正常调用。关于Python语言,如果没有接触过可以找一本Python的语法书来看看 (推荐Python精要参考(第二版),网上有电子版)。这个语言很简 单易学,只要有点编程基础,几天就可以学会它,然后就可以自如的运 用它调用NetworkX 了。二、建立图或网络1、无向图在PythonWin的S

4、hell里输入:import networkx as nx#导入 NetworkX 包,为了少打几个字母,将其重命名为nxG = nx.Graph()G.add_node(1)G.add_edge(2,3)了两个节点2、3)G.add_edge(3,2)被认为是一条边print G.nodes()print G.edges()print G.number_of_edges()#建立一个空的无向图G#添加一个节点1#添加一条边2-3(隐含着添加#对于无向图,边3-2与边2-3#输出全部的节点:1,2, 3#输出全部的边:(2, 3)#输出边的数量:1这样就可以建立一个简单的无向图了。如果你的数据

5、是存在文件里的, 可以循环从文件中读取节点和边添加到G中。2、有向图有向图的建立方式和无向图基本类似,只是在上述代码的第二行,将G =nx.Graph()改为G = nx.DiGraph()。需要注意的是,此时再添加边 3-2与边2-3,则被认为是两条不同的边(可以试着运行上述代码,自 己查看结果)。同时,有向图和无向图是可以相互转化的,分别用到Graph.to_undirected()和 Graph.to_directed()两个方法。3、加权图(网络)有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from,它接受1个或多个三元组u,v,w作为参数, 其

6、中u是起点,v是终点,w是权重。例如:G.add_weighted_edges_from(0,1,3.0),(1,2,7.5)添加0-1和1-2两条边,权重分别是3.0和7.5。如果想读取权重,可以使用get_edge_data方法,它接受两个参数u 和v,即边的起讫点。例如:print G.get_edge_data(1,2)# 输出weight: 7.5),这是一个字典结构,可以查看python语法了解它的用法。三、调用图算法NetworkX提供了常用的图论经典算法,例如DFS、BFS、最短路、最 小生成树、最大流等等,非常丰富,如果不做复杂网络,只作图论方面 的工作,也可以应用Netwo

7、rkX作为基本的开发包。具体的算法调用方 法我就不介绍了,可以浏览NX的在线手册 http:/networkx.lanl.gov/reference/algorithms.html,对每个算法都提供 了详细的帮助文档和示例。下面只给出一个最短路算法的例子:path=nx.all_pairs_shortest_path(G)#调用多源最短路径算法,计算图G所有节点间的最短路径print path02#输出节点0、2之间的最短路径序列:0,1,2四、小结 作为NetworkX学习笔记的第一部分,今天先简单介绍下NetworkX的 安装与基本使用方法。后边有时间会陆续介绍:用NetworkX进行复杂

8、 网络拓扑结构统计指标计算、典型复杂网络建模(随机图、小世界、无 标度等)以及复杂网络可视化的方法等,请感兴趣的朋友关注并提出批 评与意见。本文引用地址: content.aspx?id=337442*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:转载复杂网络常见的数据和程序代码网站转载复杂网络资源会议视频分享:Multi-disciplinary approach of complexity,.节点度相关性对无标度网络上随机游走的影响.转载幂率分布研究的实验数据一一圣达菲研究所转载第六届全国复杂网络学术会议大会日程安排. 一类复杂网络的新家族:广义Fare

9、y树网络及其三维金字塔转载复杂网络的新应用(结构力学)揭示复杂性:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:2推荐人:zhaoxing fangjinqin推荐到博客首页评论顺排11标题:发表评论人:游客binggan 2010-9-26 17:32:59 ip:202.117.58.*有些人在照闫老师的方法安装的时候,可能找不到easy-install,我也是,真的没有的,就自己去下载安装 一下,安装后可能也不是在Libsite-packages目录下,我的是在scripts目录下面的easy_install。博主回复:谢谢补充,其实python的软件安装比较乱一些,可能会

10、出现各种情况,我也没办法写得太详细 了。总之祝大家好运吧,有的时候摸索还是必要的:)10标题:发表评论人:jgshuhaihua 2010-9-25 16:52:57老师,你说的“pywin32、matplotlib和numpy是exe文件”为什么我按照你贴出的地址下载的文件都是.p y文件,点击setup后就是控制台一闪就没有了?是我下载的文件不对吗?博主回复:可能是,我下载的都是for win版本的,一般他都会提供两三个平台的版本。你再试一下,而 且隔这么久了,版本可能会有变化,不过安装方法应该不会差别太大。祝你好运!9 标题:发表评论人:游客chenziheziye 2010-7-21

11、1:54:59 ip:123.101.231.*闰老师好,我在研究通信网络,希望能用networkx做一些计算和展示,networkx有直接计算最短路径矩 阵,或连接路径权矩阵的函数呀?博主回复:用 shortest_path_length(G, source=None, target=None, weighted=False)方法,返回一个二 维数组,如果 weighted=True,输出的就是权矩阵。详见:http:/networkx.lanl.gov/reference/generatedZn etworkx.shortest_path_length.html8标题:发表评论人:游客ny

12、jyrff 2010-7-19 10:27:06 ip:125.44.152.*闫老师您好:我的系统是XP的安装pywin32、matplotlib和numpy时都提示找不到注册表,请问这个该 咋办。多谢了博主回复:这个问题我都没遇到过,估计是系统本身的问题,是不是安装了一写不允许访问注册表的软件, 如360等?你自己再排查一下,正常在xp上装是没有问题的。7 标题:发表评论人:游客fjf 2010-7-1 22:28:51 ip:159.226.161.*谢谢你,我是中科院理论物理研究所的学生,现在我们组里对于复杂网络这一块很感兴趣,导师希望我做 一些调研,希望与我们现在的研究项目结合起来,

13、希望能多交流。博主回复:别客气,我的email: kaiseryxy6 标题:发表评论人:游客fjf 2010-7-1 18:44:19 ip:159.226.161.*你好,请问这个工具能不能统计复杂网络中的最大cluster内包含的节点数啊?博主回复:可以的,详细请看它文档的cluster部分,任何返回一个图G的方法都可以统计节点和边的数 量。5 标题:发表评论人:游客蝶梦中2010-7-1 9:40:18 ip:219.239.227.*非常感谢哦,我现在做毕业设计,基本上每次来您这都能找到有用的材料 博主回复:)4标题:发表评论人:amazon 2010-6-21 19:27:48ht

14、tp:/pypi.python.Org/pypi/setuptools#files 需要单独安装easy_install工具setuptools-0.6c11.win32-py2-6.exe (md5) MS Windows installer 2.6博主回复:如果是在xp下,pywin是自带easy_install的,但版本可能较旧,win7下安装可能会有问题。3 标题:发表评论人:amazon 2010-6-21 19:15:28我是 windows7 64 位。安装 python-2.6.5.amd64 后,安装 pywin32、matplotlib 和 numpy,提示注册表 找不到p

15、ython.改安装 pywin32-214.win32-py2.6,安装 pywin32、matplotlib 和 numpy,成功。但是C:Python26Libsite-packageseasy_install.py 提示C:Python26Libsite-packageseasy_install.py is not recognized as an internal or external command, operable program or batch file.博主回复:不好意思,我还没用过win7,所以不好回答您的问题。抱歉2 标题:发表评论人:游客kxx167 2010-6-

16、21 18:02:13 ip:219.218.100.*阎老师的共享精神真值得好好学习博主回复:不敢当,科学网博客是个很好的交流平台,希望大家都能把自己的宝贝拿出来:)复杂网络分析库NetworkX学习笔记(2):统计指标计算无论是实际网络还是对模型网络进行分析,都离不开对网络拓扑统计指标的计算。反映网络结构与动力学特性的统计指标有很多,Costa等的Characterization of Complex Networks: A Survey of measurements 一文对此有全面的综述,本文仅介绍一些常用的统计 指标在NetworkX中如何计算。一、度、度分布NetworkX可以用来

17、统计图中每个节点的度,并生成度分布序列。下边 是一段示例代码(这段代码可以在Shell里一行一行的输入,也可以将 其保存为一个以py结尾的纯文本文件后直接运行),注意看注释部分:import networkx as nxG = nx.random_graphs.barabasi_albert_graph(1000,3) #生成一个 n=1000,m=3 的 BA 无标 度网络print G.degree(0)#返回某个节点的度print G.degree()#返回所有节点的度print nx.degree_histogram(G) #返回图中所有节点的度分布序列(从1至最大度的出现频次)对上述

18、结果稍作处理,就可以在Origin等软件里绘制度分布曲线了,当 然也可以用matplotlib直接作图,在上述代码后接着输入:import matplotlib.pyplot as plt#导入科学绘图的 matplotlib 包degree = nx.degree_histogram(G)#返回图中所有节点的度分布序列x = range(len(degree)#生成x轴序列,从1到最大度y = z / float(sum(degree) for z in degree#将频次转换为频率,这用到Python的一个小技巧:列表内涵,Python的确很方便:)plt.loglog(x,y,colo

19、r=blue”,linewidth=2)#在双对数坐标轴上绘制度分布曲线plt.show()#显示图表二、群聚系数这个在NetworkX里实现起来很简单,只需要调用方法 nx.average_clustering(G)就可以完成平均群聚系数的计算,而调用nx.clustering(G)则可以计算各个节点的群聚系数。三、直径和平均距离nx.diameter(G)返回图G的直径(最长最短路径的长度),而 nx.average_shortest_path_length(G)则返回图G所有节点间平均最短 路径长度。四、匹配性这个也比较简单,调用nx.degree_assortativity(G)方法可

20、以计算一个 图的度匹配性。五、中心性这个我大部分不知道怎么翻译,直接上NX的帮助文档吧,需要计算哪 方面的centrality自己从里边找:)Degree centrality measures.(点度中心性?)degree_centrality(G) Compute the degree centrality for nodes.in_degree_centrality(G) Compute the in-degree centrality for nodes.out_degree_centrality(G) Compute the out-degree centrality for nod

21、es.Closeness centrality measures.(紧密中心性?) closeness_centrality(G, v, weighted_edges) Compute closeness centrality for nodes.Betweenness centrality measures.(介数中心性?)betweenness_centrality(G, normalized, .)Computebetweenness centrality for nodes.edge_betweenness_centrality(G, normalized, .)Computebetw

22、eenness centrality for edges.Current-flow closeness centrality measures.(流紧密中心性?)current_flow_closeness_centrality(G, .) Compute current-flow closeness centrality for nodes.Current-Flow BetweennessCurrent-flow betweenness centrality measures.(流介数中心性?) current_flow_betweenness_centrality(G, .)Compute

23、current-flow betweenness centrality for nodes.edge_current_flow_betweenness_centrality(G)Computecurrent-flow betweenness centrality for edges.Eigenvector centrality.(特征向量中心性?)eigenvector_centrality(G, max_iter, tol, .) Compute the eigenvector centrality for the graph G.eigenvector_centrality_numpy(G

24、) Compute the eigenvector centrality for the graph G.Load centrality.(彻底晕菜) load_centrality(G, v, cutoff, normalized, .)Compute loadcentrality for nodes.edge_load(G, nodes, cutoff) Compute edge load.六、小结上边介绍的统计指标只是NetworkX能计算的指标中的一小部分内容, 除此之外NetworkX还提供了很多(我还没有用到过的)统计指标计算 方法,感兴趣的朋友可以去查NetworkX的在线帮助文

25、档: http:/networkx.lanl.gov/reference/index.htmlo 对于加权图的统计指标 计算,NetworkX似乎没有直接提供方法(也可能是我没找到),估计需 要自己动手编制一些程序来完成。本文引用地址: content.aspx7ick337511*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:转载复杂网络常见的数据和程序代码网站转载复杂网络资源会议视频分享: Multi-disciplinary approach of complexity,节点度相关性对无标度网络上随机游走的影响.转载幂率分布研究的实验数据一一圣达菲研究

26、所.转载第六届全国复杂网络学术会议大会日程安排一类复杂网络的新家族:广义Farey树网络及其三维金字塔转载复杂网络的新应用(结构力学)揭示复杂性:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:1 推荐人:ljxue推荐到博客首页评论顺排|3标题:发表评论人:游客jamie_luo 2010-9-29 16:44:45 ip:59.78.91.*请问对局域世界的BA模型有相关networkx的函数吗,如何对原BA模型改进呢?谢谢指点!博主回复:好像没有直接提供,但可以自己改写原来的函数(在原文件中复制一份后改下函数名】局域世 界的BA应该是随机从巳存在的节点中选一部分出来吧,这块改

27、动一下就可以了应该。2 标题:发表评论人:游客蝶梦中2010-7-1 10:47:14 ip:219.239.227.*不好意思=。=在您后面的文件中看到了,麻烦啦博主回复:别客气,祝你做出好成果!1 标题:发表评论人:游客蝶梦中2010-7-1 10:45:18 ip:219.239.227.*闫老师,您好,我现在做的东西有一部分是对BA模型进行的改良,不能直接使用networkx的函数。我想 看一下它实现BA模型的源代码,请问您知道在哪个文件里吗?我没有找到哎。复杂网络分析库NetworkX学习笔记(3):网络演化模型NetworkX提供了 4种常见网络的建模方法,分别是:规则图,ER随

28、机图,WS小世界网络和BA无标度网络。本文首先介绍在NetworkX 生成这些网络模型的方法,然后以BA无标度网络的建模为例,分析利 用NetworkX进行复杂网络演化模型设计的基本思路,以便将来开发出 我们自己的模型。同时这篇文章里还涉及到一点复杂网络可视化的方法(后边有时间会另文介绍网络可视化的方法)。一、规则图规则图差不多是最没有复杂性的一类图了,在NetworkX中,用 random_graphs.random_regular_graph(d, n)方法可以生成一个含有 n 个节点,每个节点有d个邻居节点的规则图。下面是一段示例代码,生 成了包含20个节点、每个节点有3个邻居的规则图:

29、import networkx as nximport matplotlib.pyplot as pltRG = nx.random_graphs.random_regular_graph(3,20) #生成包含 20 个节点、每个节点有3个邻居的规则图RG_pos = nx.spectral_layout(RG)#定义一个布局,此处采用 了 spectral 布局方式,后变还会介绍其它布局方式,注意图形上的区别nx.draw(RG,pos,with_labels=False,node_size = 30) #绘制规则图的图形, with_labels决定节点是非带标签(编号),node_si

30、ze是节点的直径plt.show() #显示图形图1 NetworkX生成的规则图二、ER随机图ER随机图是早期研究得比较多的一类“复杂”网络,这个模型的基本思 想是以概率p连接N个节点中的每一对节点。在NetworkX中,可以用 random_graphs.erdos_renyi_graph(n,p)方法生成一个含有 n 个节点、 以概率p连接的ER随机图:import networkx as nximport matplotlib.pyplot as pltER = nx.random_graphs.erdos_renyi_graph(20,0.2) #生成包含 20 个节点、以 概率0.

31、2连接的随机图pos = nx.shell_layout(ER)#定义一个布局,此处采用了 shell布局方式nx.draw(ER,pos,with_labels=False,node_size = 30)plt.show()图2 NetworkX生成的随机图三、WS小世界网络在 NetworkX 中,可以用 random_graphs.watts_strogatz_graph(n, k, p) 方法生成一个含有n个节点、每个节点有k个邻居、以概率p随机化重 连边的WS小世界网络,下面是一个例子:import networkx as nximport matplotlib.pyplot as

32、pltWS = nx.random_graphs.watts_strogatz_graph(20,4,0.3) #生成包含 20 个节点、每个节点4个近邻、随机化重连概率为0.3的小世界网络pos = nx.circular_layout(WS)#定义一个布局,此处采用了 circular 布局方式nx.draw(WS,pos,with_labels=False,node_size = 30) #绘制图形plt.show()运行结果如下:图3 NetworkX生成的WS小世界网络四、BA无标度网络在 NetworkX 中,可以用 random_graphs.barabasi_albert_gr

33、aph(n, m)方法生成一个含有n个节点、每次加入m条边的BA无标度网络,下面是一个例子:import networkx as nximport matplotlib.pyplot as pltBA= nx.random_graphs.barabasi_albert_graph(20,1) #生成 n=20、m=1 的 BA无标度网络_pos = nx.spring_layout(BA)#定义一个布局,此处采用了 spring布局方式nx.draw(BA,pos,with_labels=False,node_size = 30) #绘制图形plt.show()运行结果如下:图4 Networ

34、kX生成的BA无标度网络五、对BA模型实现代码的分析前面我们介绍了 NetworkX提供的4种网络演化模型的应用方法,但仅 停留在使用已有的模型是不够的,实际工作中我们可能会自己开发一些 网络演化模型。利用NetworkX提供的数据结构,我们可以比较方便的 完成这一工作。下面以NetworkX中BA模型的实现代码为例,分析用 NetworkX开发网络演化模型的一般思路。NetworkX中关于网络建模的 代码在random_graphs.py这个文件中,可以用记事本打开它。为了叙 述简便起见,我删掉了原始代码中的一些错误处理与初始条件定义的语 句,红色部分是翻译后的注释。#定义一个方法,它有两个

35、参数:n -网络节点数量;m -每步演化加入的边数 量def barabasi_albert_graph(n, m):#生成一个包含m个节点的空图(即BA模型中t=0时的m0个节点)G=empty_graph(m)#定义新加入边要连接的m个目标节点targets=range(m)#将现有节点按正比于其度的次数加入到一个数组中,初始化时的m个节点 度均为0,所以数组为空repeated_nodes=#添加其余的n-m个节点,第一个节点编号为m(Python的数组编号从0 开始)source=m#循环添加节点while sourcen:#从源节点连接m条边到选定的m个节点targets上(注意ta

36、rgets是上 一步生成的)G.add_edges_from(zip(source*m,targets)#对于每个被选择的节点,将它们加入到repeated_nodes数组中(它们 的度增加了 1)repeated_nodes.extend(targets)#将源点m次加入到repeated_nodes数组中(它的度增加了 m) repeated_nodes.extend(source*m)#从现有节点中选取m个节点,按正比于度的概率(即度优先连接) targets=set()while len(targets)m:#按正比于度的概率随机选择一个节点,见注释1x=random.choice(r

37、epeated_nodes)#将其添加到目标节点数组targets中targets.add(x)#挑选下一个源点,转到循环开始,直到达到给定的节点数nsource += 1#返回所得的图Greturn G注释1:此步是关键,random.choice方法是从一个数组中随机地挑选 一个元素。由于repeated_nodes数组中的节点出现次数是正比于节点 度的,所以这样处理可以保证按度大小的概率选出节点,即实现了度优 先连接。如果是按正比于节点适应性等非整数值优先连接,可以参考我 的另一篇博文根据值的大小随机取数组元素的方法。六、小结NetworkX的优势之一就是开源,这也是所有Python库的

38、优势(Python 是脚本语言,它没有办法隐藏源代码)。NetworkX的源代码结构清晰, 风格简练,注释详尽,是学习、研究复杂网络不错的参考资料。当然在 这方面我也是初学者,更多的功能还需要在实际应用中不断去发掘和领 会本文引用地址: content.aspx?id=337689*本文仅代表博主个人观点,与科学网无关。本文标签:复杂网络NetworkX相关文章:转载复杂网络常见的数据和程序代码网站转载复杂网络资源会议视频分享;Multi-disciplinary approach of complexity,.节点度相关性对无标度网络上随机游走的影响转载幂率分布研究的实验数据一一圣达菲研究所

39、转载第六届全国复杂网络学术会议大会日程安排. 一类复杂网络的新家族:广义Farey树网络及其三维金字塔转载复杂网络的新应用(结构力学)揭示复杂,件:从经典分形到复杂网络人群密集经济是“万堵之源”!当前推荐数:2 推荐人:huangfuqiang yizhenzhong推荐到博客首页评论顺排5标题:发表评论人:游客amazon 2010-6-29 0:15:47 ip:158.132.150.*1、Networkx的图采用了字典-字典-字典结构,这个很特殊,不是邻接矩阵或链表。请老师举例讲一下,比如对于一个三角形,3个点,3个边,或者4个点全连接,对应的G的数据结构是 什么样子的。举例有助于快速

40、理解。2。G.add_edges_from(zip(source*m,targets)这个不理解。zip函数像C+ java 一样也是返回值的吗?返回的难道是一个二维数组?比如 zip(4 4,0 2)产生:【4 4; 0 2】add_edges_from又具体是怎么弄?估计前提得理解G的“字典-字典-字典”博主回复:1、例如对于图A-B-C,它的数据结构是(A: (B: , C: (B: , B: (A: , C: (注意每个字 母前后都有单引号,这回复有问题,把引号给过滤掉了,详细说明请参见http:/networkx.lanl.gov/referen ce/introduction.ht

41、ml)2、zip(4,4,0,2)返回(4, 0), (4, 2),zip(1,2,3,4,5,6)返回(1, 4), (2, 5), (3, 6)3、add_edges_from(4, 0), (4, 2)相当于依次运行:add_edge(4,0)和 add_edge(4,2),它的含义是从一 个二元组构成的数组中依次将每个二元组作为一条边添加到图中。希望以上回答你能满意。另外如果你对 这个库感兴趣,建议你装一个Python和NX自己编几行代码,很快就会熟悉它。光看代码有时候难以体会 含义,要先熟悉Python的元组(Tuple,相当于不可变数组)、列表(List,相当于可变数组)和字典(D

42、i ct,就是哈希表)这三种基本数据结构,以及Python的函数编程思想。4标题:发表评论人:游客amazon 2010-6-28 22:50:25 ip:158.132.150.*对python语法不懂推测:#类似于C+的函数def barabasi_albert_graph(n, m):#生成一个包含m个节点的空图-猜:G不是一个邻接矩阵呢,也不是一个链表的数据结构,更可能是 一个类的对象,G=empty_graph(m)# range(5)函数的结果是一个数组:【0 1 2 3 4】,和matlab的:0:1:4 一样 targets=range(m)#提供一个摸彩票用的黑箱子,开始是空

43、的,repeated_nodes=补注 repeated_nodes#以后会装2个黄球,5个红球,12个蓝球,胳膊申请去,闭上眼睛摸球。要摸出m个球。# 如果 node-0 的 degree 是 2,node-1 的 degree 是 5,node-2 的 degree 是 7,# 则 repeated_nodes=0 0111112222222,#这样等概率随机选择时,node2被选中的概率高。# repeated_nodes最大是一个n*m*2大小的数组,内存消耗,超出了栈的大小,可能影响速度 #开始有了 m个节点,分别是:0 12. m-1,所以下一个要添加的是m,最后一个是n-1# P

44、ython的数组编号从0开始 source=m#循环添加节点,python的while不用大括号,不用end完全靠对齐?while sourcen:#从源节点连接m条边到选定的m个节点targets上(注意targets是上一步生成的)# 猜测是从 empty_graph 类中继承了一个 method: add_edges_from#但是不知道zip(source*m,targets)是什么意思,source*m 似乎是source执行m次# python特殊的语法习惯?G.add_edges_from(zip(source*m,targets)# extend是数组自有的一个功能,把某个数复

45、制几个,加到数组里,默认复制一个。repeated_nodes.extend(targets)repeated_nodes.extend(source*m)#清空箱子targets=set()然后挑m个新的node装到箱子里,为下一轮连接m条边用while len(targets)m:#真正的闭上眼睛随便x=random.choice(repeated_nodes)targets.add(x) -换成 targets.extend(x)似乎也对。#挑选下一个源点,转到循环开始,直到达到给定的节点数nsource += 1#返回所得的图Greturn G博主回复:你分析得很正确。Python是很怪,但是很简单,你和我一开始一样,受C+毒害太深了,嘿嘿, 不好转变过来:)其实Python很简单优美。回答你的一些问题(可能我理解的也不对):1、Networkx的图采用了字典-字典-字典结构,这个很特殊,不是邻接矩阵或链表。2、Python完全靠缩进定义

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号