NetworkX提供了4种常见网络的建模方法,分别是:规则图,ER随机图,WS小世界网络和BA无标度网络。本文首先介绍在NetworkX生成这些网络模型的方法,然后以BA无标度网络的建模为例,分析利用NetworkX进行复杂网络演化模型设计的基本思路,以便将来开发出我们自己的模型。同时这篇文章里还涉及到一点复杂网络可视化的方法(后边有时间会另文介绍网络可视化的方法)。
一、规则图
规则图差不多是最没有复杂性的一类图了,在NetworkX中,用random_graphs.random_regular_graph(d, n)方法可以生成一个含有n个节点,每个节点有d个邻居节点的规则图。下面是一段示例代码,生成了包含20个节点、每个节点有3个邻居的规则图:
import networkx as nx
import matplotlib.pyplot as plt
RG = nx.random_graphs.random_regular_graph(3,20) #生成包含20个节点、每个节点有3个邻居的规则图RG
pos = nx.spectral_layout(RG)
nx.draw(RG,pos,with_labels=False,node_size = 30) #绘制规则图的图形,with_labels决定节点是非带标签(编号),node_size是节点的直径
plt.show() #显示图形
运行结果如下:
图1
二、ER随机图
ER随机图是早期研究得比较多的一类“复杂”网络,这个模型的基本思想是以概率p连接N个节点中的每一对节点。在NetworkX中,可以用random_graphs.erdos_renyi_graph(n,p)方法生成一个含有n个节点、以概率p连接的ER随机图:
import networkx as nx
import matplotlib.pyplot as plt
ER = nx.random_graphs.erdos_renyi_graph(20,0.2) #生成包含20个节点、以概率0.2连接的随机图
pos = nx.shell_layout(ER)
nx.draw(ER,pos,with_labels=False,node_size = 30)
plt.show()
运行结果如下:
图2
三、WS小世界网络
在NetworkX中,可以用random_graphs.watts_strogatz_graph(n, k, p)方法生成一个含有n个节点、每个节点有k个邻居、以概率p随机化重连边的WS小世界网络,下面是一个例子:
import networkx as nx
import matplotlib.pyplot as plt
WS = nx.random_graphs.watts_strogatz_graph(20,4,0.3) #生成包含20个节点、每个节点4个近邻、随机化重连概率为0.3的小世界网络
pos = nx.circular_layout(WS)
nx.draw(WS,pos,with_labels=False,node_size = 30) #绘制图形
plt.show()
运行结果如下:
图3
四、BA无标度网络
在NetworkX中,可以用random_graphs.barabasi_albert_graph(n, m)方法生成一个含有n个节点、每次加入m条边的BA无标度网络,下面是一个例子:
import networkx as nx
import matplotlib.pyplot as plt
BA= nx.random_graphs.barabasi_albert_graph(20,1) #生成n=20、m=1的BA无标度网络
pos = nx.spring_layout(BA)
nx.draw(BA,pos,with_labels=False,node_size = 30) #绘制图形
plt.show()
运行结果如下:
图4
五、对BA模型实现代码的分析
前面我们介绍了NetworkX提供的4种网络演化模型的应用方法,但仅停留在使用已有的模型是不够的,实际工作中我们可能会自己开发一些网络演化模型。利用NetworkX提供的数据结构,我们可以比较方便的完成这一工作。下面以NetworkX中BA模型的实现代码为例,分析用NetworkX开发网络演化模型的一般思路。NetworkX中关于网络建模的代码在random_graphs.py这个文件中,可以用记事本打开它。为了叙述简便起见,我删掉了原始代码中的一些错误处理与初始条件定义的语句,红色部分是翻译后的注释。
#定义一个方法,它有两个参数:n - 网络节点数量;m - 每步演化加入的边数量
def barabasi_albert_graph(n, m):
注释1:此步是关键,random.choice方法是从一个数组中随机地挑选一个元素。由于repeated_nodes数组中的节点出现次数是正比于节点度的,所以这样处理可以保证按度大小的概率选出节点,即实现了度优先连接。如果是按正比于节点适应性等非整数值优先连接,可以参考我的另一篇博文《根据值的大小随机取数组元素的方法》。
六、小结
NetworkX的优势之一就是开源,这也是所有Python库的优势(Python是脚本语言,它没有办法隐藏源代码)。NetworkX的源代码结构清晰,风格简练,注释详尽,是学习、研究复杂网络不错的参考资料。当然在这方面我也是初学者,更多的功能还需要在实际应用中不断去发掘和领会…………
igraph中图的数据结构
typedef struct igraph_s {
} igraph_t;
(注意igraph中顶点和边都是从0开始编号一直到总数减一)。其中n是图的顶点个数,directed标志是否是有向图。所有边的顶点存储在from和to两个向量(igraph_vector_t)中,oi[e]对应的是编号为e的边所对应的尾结点在from中的index,同样ii[e]对应于e的头节点在to中的index(也就是是说e 可以表示为 from[oi[e]] -> to[ii[e]])。所以from,to,oi,ii都是长度与边数相同的向量。os和is则和oi,ii相反,表示的是从顶点到边的映射,从顶点v出发的第一条边为 from[oi[os[v]]] -> to[ii[os[v]]],所以当os[v] == os[v + 1]时候就表示从该顶点没有出边。向量is同理。os,is都是长度为顶点数加一的向量。操作igraph_t的一些基本API如igraph_empty, igraph_adjacent等见于文档手册(btw,igraph的文档写的很全很好,有空应该研究一下它制作文档的技术)。
#define BASE_BOOL
#include "igraph_pmt.h"
#include "vector.pmt"
#include "igraph_pmt_off.h"
#undef BASE_BOOL
#define BASE_BOOL
#include "igraph_pmt.h"
#include "vector.pmt"
#include "igraph_pmt_off.h"
#undef BASE_BOOL
其中vector.pmt定义的是类型无关的代码,igraph_pmt_off.h则小心翼翼的将宏清除出去(再一次感慨C++有模板真是太好了。。。)。这种手法还是有借鉴意义的(比起void*我更喜欢这样)。
Networkx的数据结构
本文来自程序员宝宝,转载请标明出处:http://blog.csdn.net/rogerrecharad/archive/2010/11/07/5993723.aspx
题意:给定若干个居民的年龄(都是1-100之间的整数),把它们按照从i型奥到大的顺序输出。输入第一行为整数n(0思路:数据太大,内存限制太紧,连把数据全读进内存都不行,所以什么快排之类的排序报废了,但是注意到这里整数范围很小,可以用计数排序。#include#includeint main(){ int n,x,c[101],i,j; while(scanf("%d",&
本文的主要重点在换行,这个也是经过好几次试验最终得出来再jmeter中换行符与java语言中换行符不一致标红框的部分是第一次试验,\r是回车\n是换行的意思,按照jmeter支持java语言可以正常的使用,但是在多用户执行数据时会出现后面的数据把前面的数据覆盖掉的情况,最终只剩下一行,后上网查阅以一部分资料,将\r去掉只使用\n可以正常进行换行。原因不知道为什么,询问开发的windows --...
本篇文章主要介绍了"armlinux中一些重要的宏-如unlikely、container_of及地址定义",主要涉及到armlinux中一些重要的宏-如unlikely、container_of及地址定义方面的内容,对于armlinux中一些重要的宏-如unlikely、container_of及地址定义感兴趣的同学可以参考一下。TEXT_OFFSET 内核在RAM中的起始位置相对
这个作业属于哪个课程https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17321这个作业要求在哪里https://bbs.csdn.net/topics/601065821这个作业的目标<让我们对自己的专业有一个大概的认识,并让老师知道我们现在的水平,方便老师更好的教学。>学号<20218544>刘艳的第一次作业你对计算机科学与技术专业了解是怎样?你了解C语言么?C...
控制层 @ControllerEndpoint(operation = "上传设备数据", exceptionMessage = "导入Excel失败") /*consumes: 指定处理请求的提交内容类型(Content-Type), 例如: application/xml application/json application/x-www-form-urlencoded multipart/form-data application/octet-stream te
FANUC机器人工具坐标系设置方法
作为客户端与 HTTP 服务交互// Problem你需要通过 HTTP 协议以客户端的方式访问多种服务。例如,下载数据或者与基于 REST 的 API 进行交互。// Solution: urllib.request发送一个简单的 HTTP GET 请求到远程的服务上from urllib import request, parse# Base URL being acces...
IntelliJ IDEA 自定义方法注解模板(转载自 昌昌93)最近没啥事开始正式用Eclipse 转入 idea工具阵营,毕竟有70%的开发者在使用idea开发,所以它的魅力可想而知。刚上手大概有一天,就知道它为啥取名为 intelli(智能化)了,确实很智能,这还是一些小小的细节,当然idea也有它不足之处,就是我们今天要讲的“自定义方法注解模板”,类注解模板可以很简单的设置,这里我就不
《计算机网络系统连通性测试》由会员分享,可在线阅读,更多相关《计算机网络系统连通性测试(2页珍藏版)》请在人人文库网上搜索。1、5.3 计算机网络系统5.3.1 连通性检测1) 根据网络设备的连通图,网管工作站应能够和任何一台网络设备通信;2) 各子网(VLAN)内用户之间的通信功能检测:根据配置方案的要求,允许通信的计算机之间可以进行资源共享和信息交换,不允许通信的计算机之间无法通信;并保证网络...
直接使用str[str.endIndex]会报数组下标越界的异常,所以需要用str.index(before:str.endIndex)表示取前一个值。简单的while循环,我这一个循环下去,我playground直接被强制退出。repeat while其实也就是java中的do while。while循环,repeat while循环。所以取字符串某个范围内的子字符串需要用那个。swift中是没有a++和--的。offsetBy也就是索引位置。使用str【0】会报错。String基本操作。
应用背景介绍高精地图作为自动驾驶的眼睛,在自动驾驶研发中占据极大的份额,而激光SLAM则是高精地图定位导航算法的关键技术,其重要性不言而喻,在AI产品如矿卡、汽车、清扫车和扫地机器人等领域...
1.概述在【Spring】Spring 如何更改动态更改运行中某个类的日志级别以及 xxx 基础上。springboot可以通过集成jolokia来使用HTTP形式访问mbean在pom.xml中添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId&g.