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
如何通过 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