random_kernel_graph#

random_kernel_graph(n, kernel_integral, kernel_root=None, seed=None)[source]#

返回一个基于指定核的随机图。

该算法以由核 \(\kappa(x,y)\) [1] 指定的概率选择 \([n(n-1)]/2\) 个可能的边中的每一个。核 \(\kappa(x,y)\) 必须是一个对称的(在 \(x,y\) 中)、非负的、有界函数。

Parameters:
nint

节点数量

kernel_integralfunction

返回核 \(\kappa(x,y)\) 的定积分的函数,\(F(y,a,b) := \int_a^b \kappa(x,y)dx\)

kernel_root: function (可选)

返回方程 \(F(y,a,b) = r\) 的根 \(b\) 的函数。 如果为 None,则使用 scipy.optimize.brentq() 查找根(这需要 SciPy)。

seedinteger, random_state, 或 None (默认)

随机数生成状态的指示器。 参见 Randomness

See also

gnp_random_graph
expected_degree_graph

Notes

核通过其定积分指定,该定积分必须作为参数之一提供。如果核积分的积分和根可以在 \(O(1)\) 时间内找到,则该算法在时间 \(O(n+m)\) 内运行,其中 m 是预期的边数 [2]

节点设置为从 \(0\)\(n-1\) 的整数。

References

[1]

Bollobás, Béla, Janson, S. and Riordan, O. “The phase transition in inhomogeneous random graphs”, Random Structures Algorithms, 31, 3–122, 2007.

[2]

Hagberg A, Lemons N (2015), “Fast Generation of Sparse Random Kernel Graphs”. PLoS ONE 10(9): e0135177, 2015. doi:10.1371/journal.pone.0135177

Examples

生成一个 Erdős–Rényi 随机图 \(G(n,c/n)\),其核为 \(\kappa(x,y)=c\),其中 \(c\) 是平均期望度。

>>> def integral(u, w, z):
...     return c * (z - w)
>>> def root(u, w, r):
...     return r / c + w
>>> c = 1
>>> graph = nx.random_kernel_graph(1000, integral, root)