首页 > 解决方案 > 如何生成和研究非整数平均度数的正则图?

问题描述

我有一个具有以下属性的无向图,我需要对完全随机图和具有相同属性的常规图进行一些分析。

属性:

Number of Nodes = 37764
Number of Edges = 518151
Average Degree = 27.44153161741341

为了研究随机图的属性,我使用networkx.gnm_random_graph(37764,518151)并执行了我的分析来创建它们。但是我对如何使用相同的属性生成规则图感到非常困惑。

我在这里找到了两种使用networkx.random_regular_graph(k, n)文档)和igraph.Graph().K_Regular(n, k)文档)生成常规图形的方法,但注意到它们需要度数k是整数值。

但在我的原始图表中,该值是一个浮点值27.44153161741341。现在我无法理解如何为我的分析创建一个常规图(或许多图以在平均时给出相同的上述属性)。

改写我的问题:在我的情况下,如何处理平均学位的小数部分?

语言/库不受解决方案的限制。

标签: pythonnetworkxigraphcomplex-networks

解决方案


正则图是每个顶点具有相同度数的图。

不可能有一个具有平均十进制度数的常规图表,因为图表中的所有节点都需要有十进制度数。

你能做的最好的事情是:

>>> G = nx.random_regular_graph(27, 37764)
>>> len(G.edges())
509814

# OR

>>> G = nx.random_regular_graph(28, 37764)
>>> len(G.edges())
528696

我想您可以尝试以下方法:

def perfect_avg(v_27, v_28):
    return v_27 * (1-0.44153161741341) + v_28 * (0.44153161741341)

其中 v_27 是度数 = 27 的图
的值(而 v_28 是度数 = 28 的图的值)

例如:

>>> nr_edges27 = len(G27.edges())
>>> nr_edges28 = len(G28.edges())
>>> perfect_avg(nr_edges27, nr_edges28)
518151.0

推荐阅读