# -*- coding: utf-8 -*- """ Created on Sun Jan 31 12:40:03 2021@author: Administrator """"""重叠度:在多层网络中,由于节点不只是存在一层网络中,因此只用一个 值来衡量度是不合理的。最普遍的做法是以向量的形式将单一网络中的 度中心性扩展到多层网络。重叠度是把节点i每一 层的度值进行累加,得到节点i的重叠度。"""import networkx as nxdefget_group(result,k):print("----排序结果分成"+str(k)+"组之后的结果为----")s =[]ss =[]#每一个分组包含的数目n =int(len(result)/ k)for i inrange(len(result)):s.append(result[i])ss.append(result[i][0])if(len(s)% n ==0):print(s)print("-----节点序号------")print(ss)print("-----我是分割线----")# print(s) #输入邻接矩阵,计算多层网络的重叠度 defget_degree_of_overlap():G = nx.Graph()filestr =""withopen("all.txt")as files:for line in files:filestr += line.strip()#将字符串转换成列表matrix =eval(filestr)nodes =range(len(matrix))G.add_nodes_from(nodes)for i inrange(len(matrix)):for j inrange(len(matrix)):if(matrix[i][j]==1):G.add_edge(i, j)#得到单层网络的节点数目length =int(len(G.nodes())/2)#度值degree =list(nx.degree(G))ss =[]for e in degree:ss.append(list(e))print("每一个节点的度值为:")print(ss)result =[]for i in ss:for j in ss:if(j[0]- i[0]== length):i[1]= i[1]+ j[1]result = ss[0:length]print("节点的重叠度为:")print(result)print("重叠度从大到小排序为:")end =sorted(result,key =lambda x:x[1],reverse =True)print(end)return enddefmain():#需要分组的组数number =2#参数为分组数目 result = get_degree_of_overlap() get_group(result,number)#启动程序 main()