一种通过numpy生成矩阵计算度中心性的方法

    技术2022-07-10  90

    通过生成矩阵实现度的计算度中心性计算,注意:有向图的度中心性合并计算(入度+入度)/(节点总数-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

    Processed: 0.008, SQL: 12