【问题标题】:How to generate and study regular graph for a non-integer average degree?如何生成和研究非整数平均度数的正则图?
【发布时间】:2020-12-16 10:07:58
【问题描述】:

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

属性:

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

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

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

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

重新表述我的问题:在我的情况下如何处理平均学位的小数部分?

语言/库对解决方案没有限制。

【问题讨论】:

    标签: python networkx igraph complex-networks


    【解决方案1】:

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

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

    你能做的最好的是:

    >>> 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
    

    【讨论】:

    • 是的,我想过有 27 度或 28 度,但这些图的属性不会与原始平均度的预期图相差很大吗?
    • 边的数量至少发生了相当大的变化。我不知道最短路径长度、簇系数、度数 ...
    • 所有其他属性取决于图结构。我主要担心边缘的数量,因为它会影响所有属性。请就此解决方案提出建议 - 我将小数部分近似为 4 位。那变成0.4415 = 883/2000,所以我制作了 2000 个图表,其中我制作了 883 个 28 度的图表和 2000-883=1117 个 27 度的图表?因此,我们的平均度数将与 2000 多张图大致相同。
    • 是的,在这种情况下,2000 个图的平均度数将是 27.4415
    • 我与该领域的少数人讨论过,他们告诉我,由于我们必须研究图形的属性,因此 1 度的差异无关紧要。因此,我们可以取舍入度,在本例中为 27。
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多