在 python 中生成幂律度分布
Generate a power-law degree distribution in python
设 n
为网络的大小,t
为幂律指数。目标是生成具有 n
个顶点的随机图 G
,其具有由 t
.
指定的幂律度数分布
已有几个答案:(1) and (2) answer 2,都使用了random.paretovariate()
函数。但是,这并不能保证生成的序列是有效的度数序列。
我还检查了 networkx,但未能找到任何生成幂律度数序列的函数。在 Python 中有没有办法做到这一点?
您可以使用 networkx
执行此操作。 is_graphical
函数允许您确定 powerlaw_sequence
函数的结果是否为有效的度序列。一旦我们生成了一个有效的序列,我们就可以从中创建一个随机图。
from networkx.generators.degree_seq import random_degree_sequence_graph
from networkx.algorithms.graphical import is_graphical
from networkx.utils.random_sequence import powerlaw_sequence
n, t = 10, 2
while True: # Continue generating sequences until one of them is graphical
seq = sorted([int(round(d)) for d in powerlaw_sequence(n, t)], reverse=True) # Round to nearest integer to obtain DISCRETE degree sequence
if is_graphical(seq):
break
G = random_degree_sequence_graph(seq, tries=100) # Adjust number of tries as you see fit
print(sorted(d for _, d in G.degree()))
设 n
为网络的大小,t
为幂律指数。目标是生成具有 n
个顶点的随机图 G
,其具有由 t
.
已有几个答案:(1)random.paretovariate()
函数。但是,这并不能保证生成的序列是有效的度数序列。
我还检查了 networkx,但未能找到任何生成幂律度数序列的函数。在 Python 中有没有办法做到这一点?
您可以使用 networkx
执行此操作。 is_graphical
函数允许您确定 powerlaw_sequence
函数的结果是否为有效的度序列。一旦我们生成了一个有效的序列,我们就可以从中创建一个随机图。
from networkx.generators.degree_seq import random_degree_sequence_graph from networkx.algorithms.graphical import is_graphical from networkx.utils.random_sequence import powerlaw_sequence n, t = 10, 2 while True: # Continue generating sequences until one of them is graphical seq = sorted([int(round(d)) for d in powerlaw_sequence(n, t)], reverse=True) # Round to nearest integer to obtain DISCRETE degree sequence if is_graphical(seq): break G = random_degree_sequence_graph(seq, tries=100) # Adjust number of tries as you see fit print(sorted(d for _, d in G.degree()))