随机图生成器如何在networkx中工作?

时间:2011-07-15 07:22:06

标签: python networkx

我使用source code of Networkx生成具有泊松度分布的随机图。

我更改了我需要的部分代码,如下所示:

import random
import networkx
import math
from networkx.generators.classic import empty_graph

def gnp_random_graph(n, p, seed=None):
    """Return a random graph G_{n,p}.

    Parameters
    ----------
    n : int
        The number of nodes.
    p : float
        Probability for edge creation.
        possible edges: n[n-1]/2
    seed : int, optional
        Seed for random number generator (default=None). 

    """
    #My sample  
    z = 4 #mean degree
    n = 10 #Number of nodes
    p = math.exp**(-z)*z**(k)/(math.factorial(k)) ##I add this myself #k is missing   

    #This part is from the source 
    G=empty_graph(n)

    if not seed is None:
        random.seed(seed)

    for u in xrange(n):
        for v in xrange(u+1,n):
            if random.random() < p:
                G.add_edge(u,v)
return G

在生成边缘的最后一部分中,我不明白它是如何计算度数并与p进行比较(度数(k)的概率分布)?对我来说,它看起来像生成一个随机数btw(0,1)。但是如何将域用于p并将随机数与p(k)进行比较?

2 个答案:

答案 0 :(得分:3)

除非节点/边的数量很大,否则会给出bernoulli分布。您可以通过networkx轻松地为您提供泊松度分布。

import numpy as np
from scipy.stats import poisson

def poissongraph(n,mu):
    z= np.zeros(n) #n is number of nodes
    for i in range(n):
        z[i]=poisson.rvs(mu) #mu is the expected value
    G=expected_degree_graph(z)
    return G

答案 1 :(得分:1)

这是有效的,因为以这种方式生成图形(使用Brenoulli采样)将产生具有泊松度分布的图形(详细解释here (pdf))。