python: 如何通过NetworkX获得度分布的二阶矩

python: How to get second moment of degree distribution by NetworkX

如何通过 NetworkX 获得无向图的度分布的二阶矩 ()?

我不确定您是否已经找到答案,但是 here 是关于网络科学的一些很棒的文档。

对于您的问题,请特别查看第 4 章部分:“The Meaning of Scale-Free”:

如评论中所述,二次矩可以通过将度数的平方和除以节点数来计算(假设每个节点只存在一次并且所有节点的概率都相同)。

这是计算 n_th 矩的一般形式:

def nth_moment(g,n):
    s = 0
    for node in g.nodes:
        s += g.degree[node] ** n
    return (s/len(g))

函数计算二阶矩的用法示例:

some_graph = nx.barabasi_albert_graph(10000, 2, seed=1)
print(nth_moment(some_graph, 2))

更快 - Numpy

import numpy as np
import networkx as nx

g = nx.barabasi_albert_graph(10000, 2, seed=1)
def nth_moment_v2(g,n):
    degree_np = np.array(list(dict(g.degree).values()))
    return (sum(degree_np**n)/len(g))

次:

st = time.time()         
print(nth_moment(g,2))
print(time.time()-st)

st = time.time()          
print(nth_moment_v2(g,2))
print(time.time()-st)

58.3626
0.017042160034179688
58.3626
0.005998849868774414