1、实验目的:
利用Python创建无标度关联双层网络,要求A、B层都为无标度网络并且A、B层的节点一一对应。
- 工具:Pycharm和Python的Multinetx包、matplotlib包
2、实验过程:
首先下载multinetx包,由于pycharm自带的multinetx包运行会出现错误,所以在网上下载了multinetx包的压缩包,然后在Lib\site-packages直接解压,就可以运行使用了multinetx包的代码。其次,从终端输入节点个数N和每次加入的边数K,然后分别构造g1、g2这两个无标度网络,接着利用矩阵存储节点连接关系存放于arr[][][]数组中.最后利用multinetx包里面的函数:draw_networkx()画出这个无标度关联双层网络。
3、实验结果:
4、源代码:
# create by stu_kk
import numpy as np
import matplotlib.pyplot as plt
import multinetx as mx
print("输入结点个数:")
N = int(input())
print('请输入每次加入的边数k:')
k=int(input())
g1 = mx.barabasi_albert_graph(N,k)#第一个图
g2 = mx.barabasi_albert_graph(N,k)#第二个图
#定义层之间互连的网络类型,这里是无标度网络
arr = mx.lil_matrix(np.zeros((N*3,N*3)))
arr[0: N, N:2*N] = np.identity(N)
arr += arr.T
#设置边
mg = mx.MultilayerGraph(list_of_layers=[g1,g2],inter_adjacency_matrix=arr)
mg.set_edges_weights(inter_layer_edges_weight=4)
mg.set_intra_edges_weights(layer=0,weight=1)
mg.set_intra_edges_weights(layer=1,weight=2)
##绘制邻接矩阵和双层网络
pos = mx.get_position(mg,mx.fruchterman_reingold_layout(mg.get_layer(0)),layer_vertical_shift=1.4,layer_horizontal_shift=0.0,proj_angle=7)
mx.draw_networkx(mg,pos=pos,node_size=N,with_labels=False,
edge_color=[mg[a][b]['weight'] for a,b in mg.edges()],
edge_cmap=plt.cm.jet_r)
plt.rcParams['font.sans-serif'] = ['STSong']
plt.title("无标度双层关联网络")
plt.savefig("./twoceng.jpg")
plt.show()