# -*- coding: utf-8 -*-
"""
Created on Sun Jan 31 12:40:03 2021
@author: Administrator
"""
"""
重叠度:在多层网络中,由于节点不只是存在一层网络中,因此只用一个
值来衡量度是不合理的。最普遍的做法是以向量的形式将单一网络中的
度中心性扩展到多层网络。重叠度是把节点i每一
层的度值进行累加,得到节点i的重叠度。
"""
import networkx as nx
def get_group(result,k):
print("----排序结果分成" +str(k) +"组之后的结果为----")
s = []
ss = []
#每一个分组包含的数目
n = int(len(result) / k)
for i in range(len(result)):
s.append(result[i])
ss.append(result[i][0])
if(len(s) % n == 0):
print(s)
print("-----节点序号------")
print(ss)
print("-----我是分割线----")
# print(s)
#输入邻接矩阵,计算多层网络的重叠度
def get_degree_of_overlap():
G = nx.Graph()
filestr = ""
with open("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 in range(len(matrix)):
for j in range(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 end
def main():
#需要分组的组数
number = 2
#参数为分组数目
result = get_degree_of_overlap()
get_group(result,number)
#启动程序
main()
求解网络的重叠度
最新推荐文章于 2021-07-11 10:51:27 发布