configuration_model#

configuration_model(deg_sequence, create_using=None, seed=None)[源代码]#

返回具有给定度序列的随机图。

配置模型通过随机分配边来匹配给定的度序列,生成一个随机伪图(包含平行边和自环的图)。

参数:
deg_sequence非负整数列表

列表中的每个条目对应于一个节点的度。

create_usingNetworkX 图构造器,可选(默认为 MultiGraph)

要创建的图类型。如果提供了图实例,则在填充前会先清空。

seed整数、random_state 对象或 None(默认)

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

返回:
GMultiGraph

一个具有指定度序列的图。节点的标签从 0 开始,索引对应于 deg_sequence 中的位置。

抛出:
NetworkXError

如果度序列的和不是偶数。

另请参阅

is_graphical

说明

如 Newman [1] 所述。

允许使用非图序列(某些简单图无法实现的序列),因为此函数返回的图包含自环和平行边。如果度序列的和不是偶数,则会抛出异常。

此配置模型的构造过程可能导致重复边和自环。您可以移除自环和平行边(见下文),这可能会导致生成的图不完全具有指定的度序列。

自环和平行边的密度随着节点数量的增加而趋于减小。然而,通常自环的数量会趋近于具有非零均值的泊松分布,平行边也类似。考虑一个有 k 个半边的节点。连接到同一节点的另一个半边的概率基本上是 (k - 1) / N,其中 k 是度,N 是节点数量。因此,自环的概率与 c / N 成正比,其中 c 为某个常数。随着 N 增长,这意味着我们期望有 c 个自环。平行边也类似。

参考文献

[1]

M.E.J. Newman, “The structure and function of complex networks”, SIAM REVIEW 45-2, pp 167-256, 2003.

示例

您可以使用 random_sequence 中的分布函数(或您自己的函数)来创建遵循特定分布的度序列。例如,要创建一个具有从幂律分布中选择的度序列的、包含一百个节点的无向多重图

>>> sequence = nx.random_powerlaw_tree_sequence(100, tries=5000)
>>> G = nx.configuration_model(sequence)
>>> len(G)
100
>>> actual_degrees = [d for v, d in G.degree()]
>>> actual_degrees == sequence
True

返回的图是一个多重图,可能包含平行边。要移除返回图中的所有平行边

>>> G = nx.Graph(G)

类似地,要移除自环

>>> G.remove_edges_from(nx.selfloop_edges(G))