社团划分中的一个衡量指标模块度Q的计算,之前一直理解错了,是按照划分之前的原始的图去计算结点信息,同时加上划分以后的社团,所以需要用到原来的图G1和划分完以后的图G2
import networkx as nx
def Q(G1,G2):
m=len(G1.edges())
Aab=0
res=0.0
for a in G1.nodes():
for b in G1.nodes():
if nx.has_path(G2,a,b):
Aab=0
if b in G1.neighbors(a):
Aab=1
res=res+(Aab*m*2-nx.degree(G1,a)*nx.degree(G1,b))/(4*m*m)
return res