我有一个网络,以及如何生成随机网络,但确保每个节点使用networkx保留原始网络的相同级别?我的第一个想法是获得邻接矩阵,并在矩阵的每一行中执行随机,但这种方式很复杂,例如,需要避免自连接(在原始网络中看不到)并重新标记节点。谢谢!
答案 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
,但它不能防止平行边缘或自循环,所以你需要修剪它们并自己替换边缘。