stochastic_block_model#

stochastic_block_model(sizes, p, nodelist=None, seed=None, directed=False, selfloops=False, sparse=True)[source]#

返回一个随机块模型图。

该模型将节点划分为任意大小的块,并在节点对之间独立地放置边,边的概率取决于块。

Parameters:
sizes整数列表

块的大小

p浮点数的二维列表

元素 (r,s) 表示从组 r 的节点到组 s 的节点的边的密度。 p 必须与组的数量匹配(len(sizes) == len(p)), 如果图是无向的,则必须对称。

nodelist列表, 可选

块标签根据 nodelist 中的节点标识符分配。如果 nodelist 为 None,则顺序为范围 [0, sum(sizes)-1]。

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

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

directed布尔值, 可选, 默认=False

是否创建有向图。

selfloops布尔值, 可选, 默认=False

是否包含自环。

sparse: 布尔值, 可选, 默认=True

使用稀疏启发式方法加速生成器。

Returns:
gNetworkX Graph 或 DiGraph

大小为 sum(sizes) 的随机块模型图

Raises:
NetworkXError

如果概率不在 [0,1] 范围内。 如果概率矩阵不是方阵(有向情况)。 如果概率矩阵不对称(无向情况)。 如果大小列表与 nodelist 或概率矩阵不匹配。 如果 nodelist 包含重复项。

References

[1]

Holland, P. W., Laskey, K. B., & Leinhardt, S., “Stochastic blockmodels: First steps”, Social networks, 5(2), 109-137, 1983.

Examples

>>> sizes = [75, 75, 300]
>>> probs = [[0.25, 0.05, 0.02], [0.05, 0.35, 0.07], [0.02, 0.07, 0.40]]
>>> g = nx.stochastic_block_model(sizes, probs, seed=0)
>>> len(g)
450
>>> H = nx.quotient_graph(g, g.graph["partition"], relabel=True)
>>> for v in H.nodes(data=True):
...     print(round(v[1]["density"], 3))
0.245
0.348
0.405
>>> for v in H.edges(data=True):
...     print(round(1.0 * v[2]["weight"] / (sizes[v[0]] * sizes[v[1]]), 3))
0.051
0.022
0.07