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