通过生成矩阵实现度的计算度中心性计算,注意:有向图的度中心性合并计算(入度+入度)/(节点总数-1)
关键是找好节点与位置的对应关系!同时考虑好矩阵一行的计算M[1]与一列M[:,1]的写法
import networkx as nx
import numpy as np
from matplotlib import pyplot as plt
def nodedegree(G): #计算有向图出度中心性及无向图的度中心性
N = list(G.nodes())
M = nx.to_numpy_matrix(G, nodelist=N) #计算矩阵行:np.sum(M[1])与列:np.sum(M[:,1])
d={}
for i in N:
t=N.index(i) #返回节点i在列表中的位置,对应矩阵中元素
d[i]=(np.sum(M[t]))/(len(N)-1) #度中心性计算方法是度除节点数-1
return d
if __name__ == "__main__":
G=nx.DiGraph()
with open('E:\\kt\\kkkk.txt') as f: #数据集根据位置取
# n, m = f.readline().split()
for line in f:
u, v = map(int, line.split())
try:
G[u][v]['weight'] += 1
except:
G.add_edge(u,v, weight=1)
print(nodedegree(G))
# pos = nx.spring_layout(G) # 此语句可以不要,图形固定,否则会变化
# nx.draw(G, pos, node_color='r', node_size=400, with_labels=True, alpha=0.9)
# plt.show(G)
数据集样式
1 2
1 3
1 4
2 4
3 9
4 9
2 9
9 1