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

标签 python networking networkx

我有一个网络,如何使用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/

相关文章:

python - HttpError 401 尝试通过 CloudStorage Pipeline 访问 BigQuery 网址

python - Pandas - 添加列,匹配索引

python - Pygubu 从 UI 文件加载新窗口

c# - 如何在 C# 控制台应用程序中设置出站/发送 IP 地址?

graph - 为Networkx和Graphviz中的特定节点着色

python - 如何在 networkx 中高效地生成多个具有随机边权重的随机图

python - 将 html 实体文件转换为 Unicode(使用 BeautifulSoup 和 Python?)

linux - 向 255.255.255.255 广播 UDP 数据包

java - 如何减少 ssl 握手的等待时间?

python - 迭代邻居和属性