graphscope.nx.generators.degree_seq.configuration_model

graphscope.nx.generators.degree_seq.configuration_model(deg_sequence, create_using=None, seed=None)[源代码]

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

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

Parameters:
  • deg_sequence (列表,元素为非负整数) – 每个列表元素对应一个节点的度数。

  • create_using (NetworkX 图构造函数可选默认为 MultiGraph) – 要创建的图类型。如果是图实例,则会在填充前被清空。

  • seed (integer, random_state, or None (default)) - 随机数生成状态的指示器。 参见随机性

Returns:

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

Return type:

多图

Raises:

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

另请参阅

is_graphical

备注

如Newman所述[1]

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

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

随着节点数量的增加,自环和平行边的密度往往会降低。然而,通常情况下,自环数量会趋近于具有非零均值的泊松分布,平行边数量也类似。考虑一个具有k个存根的节点,其与同一节点另一个存根连接的概率基本为(k - 1) / N,其中k表示度数,N表示节点数量。因此,自环概率的规模约为某个常数c / N。随着N的增长,这意味着我们预期会有c个自环。平行边的情况也类似。

参考文献

示例

您可以通过使用random_sequence中的某个分布函数(或自定义函数)来创建符合特定分布的度序列。例如,要创建一个包含100个节点的无向多重图,其度序列选自幂律分布:

>>> 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))