如何使用networkx生成随机网络但保持原始节点度?

时间:2018-01-18 12:58:59

标签: python networking networkx

我有一个网络,以及如何生成随机网络,但确保每个节点使用networkx保留原始网络的相同级别?我的第一个想法是获得邻接矩阵,并在矩阵的每一行中执行随机,但这种方式很复杂,例如,需要避免自连接(在原始网络中看不到)并重新标记节点。谢谢!

1 个答案:

答案 0 :(得分:1)

我相信你所寻找的是expected_degree_graph。它基于预期度数序列生成随机图,其中列表中的每个度数对应于节点。它甚至还包括禁止自我循环的选项!

您可以使用networkx.degree获取学位列表。以下是如何在networkx 2.0+中一起使用它们的示例(degree在1.0中略有不同):

import networkx as nx
from networkx.generators.degree_seq import expected_degree_graph

N,P = 3, 0.5
G = nx.generators.random_graphs.gnp_random_graph(N, P)
G2 = expected_degree_graph([deg for (_, deg) in G.degree()], selfloops=False)

请注意, 保证使用expected_degree_graph确保每个节点的确切度数;顾名思义,给定每个度数的期望值是概率性的。如果你想要更具体的东西你可以使用configuration_model,但它不能防止平行边缘或自循环,所以你需要修剪它们并自己替换边缘。