复杂网络(二)

一、网络的基本静态几何特征

1.1 度分布

节点的度:在网络中,节点v_{i}的邻边数k_{i}称为该节点的度

对于网络中所有节点的度求平均,可得到网络的平均度

度分布:大多数实际网络中的节点的度满足一定的概率分布。定义P(k)为网络中度为k的节点在整个网络中所占的比例。

规则网络:由于每个节点具有相同的度,所以其度分布集中在一个单一尖峰上。是一种Deta分布

完全随机网络:度分布具有Poisson分布的形式,每一条边的出现概率是相等的,大多数节点的度基本相同,并接近于网络平均度<k>,远离峰值<k>,度分布则按指数形式集聚下降。把这类网络称为均匀网络。

无标度网络:具有幂指数形式的度分布。所谓无标度是指一个概率分布函数F(x)对于任意给定常数a存在常数b使得F(x)满足F(ax) = bF(x)。

1.2 网络的直径和平均距离

网络中的两节点v_{i}v_{j}之间经历边数最少得一条简单路径(经历的边各不相同),称为测地线

测地线的边数d_{ij}称为两节点v_{i}v_{j}之间的距离

网络的直径D定义为所有距离d_{ij}中的最大值 D = max_{1 \leq i,j \leq N}d_{ij}

平均距离(特征路径长度)L定义为所有节点对之间距离的平均值,它描述了网络中节点间的平均分离程度,即网络有多小,计算公式为L = \frac{1}{N^{2}}\sum _{j=1}^{N}\sum _{i=1}^{N}d_{ij}

很多实际网络虽然节点数巨大,但平均距离却小得惊人,这就是小世界效应

集聚系数:用以捕获给定节点的邻居节点之间的连接程度

1.3 度-度相关性

基于最近邻平均度值的度-度相关性

度-度相关性描述了网络中度大的节点和度小得节点之间的关系。若度大的节点倾向于和度大的节点连接,则网络是度-度正相关的;反之,若度大的节点倾向于和度小的节点连接,则网络是du-度负相关的。

节点v_{i}最近邻平均度值定义为 k_{nn,j} = \left [ \sum_{j}^{}a_{ij}k_{j} \right ] / k_{i}

其中,k_{i}表示节点v_{i}的度值,a_{ij}为邻接矩阵元素。

基于Pearson相关系数的度-度相关性

 1.4 介数和核度

介数:

介数分为节点介数边介数两种,反映了节点或边在整个网络中的作用和影响力。

节点的介数B_{i}定义为 B_{i} = \sum_{j\neq l\neq i}\left [ N_{jl}(i) / N_{jl} \right ]

式中,N_{jl}表示节点v_{j}v_{l}之间的最短路径条数,N_{jl}(i)表示节点v_{j}v_{l}之间的最短路径经过节点v_{i}的条数。

边的介数B_{ij}定义为B_{ij} = \sum_{(l,m) \neq (i,j)}\left [ N_{lm}(e_{ij})/N_{lm} \right ]

式中,N_{lm}表示节点v_{l}v_{m}之间的最短路径系数条数,N_{lm}(e_{ij})表示节点v_{l}v_{m}之间的最短路径经过边e_{ij}的条数。

核度:

一个图的k-核是指反复去掉度值小于k的节点及其连线后,所剩余的子图,该子图的节点数就是该核的大小。若一个节点属于k-核,而不属于(k + 1)-核,则此节点的核度为k。节点核度的最大值叫做网络的核度。

网络密度:

网络密度指的是一个网络中各节点之间联络的紧密程度。网络G的网络密度d(G)定义为

d(G) = 2M / [N(N - 1)],式中,M为网络中实际拥有的连接数,N为网络节点数。

二、代码实践

#Poisson分布(以ER网络为例)
# import networkx as nx
# import matplotlib.pyplot as plt
#
# #创建一个ER随机网络
n = 10000
# p = 0.001
# ER = nx.erdos_renyi_graph(n, p)
#
# #获取平均度
# d = dict(nx.degree(ER))
# print("平均度:", sum(d.values())/len(ER.nodes))
#
# #获取所有可能得度值对应的概率
# x = list(range(max(d.values())+1))
# y = [i/n for i in nx.degree_histogram(ER)]
# print("所有可能得度值对应的概率:", list(zip(x, y)))
# #绘制度分布图
# plt.plot(x, y)
# plt.xlabel("k")
# plt.ylabel("P(k)")
# plt.show()

#幂律分布(以BA无标度网络为例)
import networkx as nx
import matplotlib.pyplot as plt
m = 3
BA = nx.barabasi_albert_graph(n, m)
#获取平均度
d = dict(nx.degree(BA))
print("平均度:", sum(d.values())/len(BA.nodes))
#获取所有可能得度值对应的概率
x = list(range(max(d.values())+1))
y = [i/n for i in nx.degree_histogram(BA)]
print("所有可能得度值对应的概率:", list(zip(x, y)))
#绘制度分布图
plt.plot(x, y)
plt.xlabel("k")
plt.ylabel("P(k)")
plt.show()

#在双对数坐标轴下显示
plt.plot(x,y)
plt.xscale("log")
plt.yscale("log")
plt.xlabel("k")
plt.ylabel("P(k)")
plt.show()
#在双对数坐标轴下要把横坐标和纵坐标的0值排除
new_x = []
new_y = []
for i in range(len(x)):
    if y[i] != 0:
        new_x.append(x[i])
        new_y.append(y[i])
plt.plot(new_x,new_y)
plt.xscale("log")
plt.yscale("log")
plt.xlabel("k")
plt.ylabel("P(k)")
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值