【问题标题】:python: How to get second moment of degree distribution by NetworkXpython:如何通过 NetworkX 获得度分布的第二时刻
【发布时间】:2021-02-24 10:46:03
【问题描述】:

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

【问题讨论】:

  • 对所有节点求和k^2,然后除以节点数。
  • 是图的二阶矩吗?各种网络之间有什么区别吗?谢谢@Joel

标签: python graph networkx social-networking


【解决方案1】:

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

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

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

这是计算第 n 时刻的这个计算的广义形式:

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

【讨论】:

  • 非常好的和详细的答案。这应该是公认的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多