graphscope.nx.generators.degree_seq.directed_configuration_model¶
- graphscope.nx.generators.degree_seq.directed_configuration_model(in_degree_sequence, out_degree_sequence, create_using=None, seed=None)[源代码]¶
返回一个具有给定度序列的有向随机图。
配置模型通过随机分配边以匹配给定的度序列,生成一个随机有向伪图(包含平行边和自环的图)。
- Parameters:
in_degree_sequence (list of nonnegative integers) – 每个列表条目对应一个节点的入度。
out_degree_sequence (list of nonnegative integers) – 每个列表条目对应一个节点的出度。
create_using (NetworkX 图构造函数, 可选 (默认 MultiDiGraph)) - 要创建的图类型。如果是图实例,则在填充前会被清空。
seed (integer, random_state, or None (default)) - 随机数生成状态的指示器。 参见随机性。
- Returns:
G – 一个具有指定度序列的图。 节点从0开始标记,索引对应于deg_sequence中的位置。
- Return type:
多向图
- Raises:
NetworkXError - 如果度序列的总和不相同。
另请参阅
备注
如Newman所述算法[1]。
允许非图形度序列(无法由任何简单图实现),因为此函数返回带有自循环和平行边的图。如果度序列的总和不相同,则会引发异常。
这种配置模型的构建过程可能会导致重复边和循环。您可以移除自环和平行边(见下文),这很可能会得到一个不完全符合指定度序列的图。这种“有限尺寸效应”会随着图规模的增大而减弱。
参考文献
示例
可以通过修改现有有向图的入度和出度序列来创建新的有向图。例如,这里我们修改有向路径图:
>>> D = nx.DiGraph([(0, 1), (1, 2), (2, 3)]) >>> din = list(d for n, d in D.in_degree()) >>> dout = list(d for n, d in D.out_degree()) >>> din.append(1) >>> dout[0] = 2 >>> # We now expect an edge from node 0 to a new node, node 3. ... D = nx.directed_configuration_model(din, dout)
返回的图是一个有向多重图,可能包含平行边。如需从返回的图中移除所有平行边:
>>> D = nx.DiGraph(D)
同样地,要移除自循环:
>>> D.remove_edges_from(nx.selfloop_edges(D))