configuration_model#

configuration_model(deg_sequence, create_using=None, seed=None)[source]#

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

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

Parameters:
deg_sequencelist of nonnegative integers

每个列表项对应一个节点的度。

create_usingNetworkX图构造函数, 可选 (默认 MultiGraph)

要创建的图类型。如果是图实例,则在填充前清空。

seedinteger, random_state, or None (默认)

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

Returns:
GMultiGraph

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

Raises:
NetworkXError

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

See also

is_graphical

Notes

如Newman [1] 所述。

允许非图形度序列(不能由某些简单图实现),因为此函数返回带有自环和平行边的图。如果度序列的和不 是偶数,则会引发异常。

这种配置模型构建过程可能导致重复边和环。您可以删除自环和平行边(见下文),这可能会导致图不具有 指定的确切度序列。

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

References

[1]

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

Examples

您可以使用 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))