我有一个网络,如何使用networkx生成随机网络但确保每个节点保留与原始网络相同的程度?我的第一个想法是获取邻接矩阵,并在矩阵的每一行中执行随机操作,但这种方式有点复杂,例如需要避免自连接(这在原始网络中是看不到的)并重新标记节点。谢谢!
最佳答案
我相信您正在寻找的是 expected_degree_graph
。它根据预期度数序列生成随机图,其中列表中的每个度数对应于一个节点。它甚至还包括一个禁止自循环的选项!
您可以使用 networkx.degree
获取学位列表。以下是如何在 networkx 2.0+ 中一起使用它们的示例(level
在 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
,但是它不能防止平行边缘或自循环,因此您需要修剪这些边缘并自行更换边缘。
关于python - 如何使用networkx生成随机网络但保持原始节点度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321963/