directed_configuration_model#

directed_configuration_model(in_degree_sequence, out_degree_sequence, create_using=None, seed=None)[source]#

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

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

Parameters:
in_degree_sequence非负整数列表

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

out_degree_sequence非负整数列表

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

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

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

seed整数,random_state,或None(默认)

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

Returns:
GMultiDiGraph

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

Raises:
NetworkXError

如果度序列的和不相等。

Notes

算法如Newman [1] 所述。

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

这种配置模型构建过程可能导致重复边和自环。您可以删除自环和平行边(见下文),这可能会导致图不再具有指定的确切度序列。这种“有限尺寸效应”随着图的尺寸增加而减小。

References

[1]

Newman, M. E. J. and Strogatz, S. H. and Watts, D. J. Random graphs with arbitrary degree distributions and their applications Phys. Rev. E, 64, 026118 (2001)

Examples

可以通过修改现有有向图的入度和出度序列来创建新的有向图。例如,这里我们修改有向路径图:

>>> 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
>>> # 我们现在期望从节点0到新节点,节点3有一条边。
... D = nx.directed_configuration_model(din, dout)

返回的图是一个有向多重图,可能包含平行边。要删除返回图中的任何平行边:

>>> D = nx.DiGraph(D)

同样,要删除自环:

>>> D.remove_edges_from(nx.selfloop_edges(D))