eigenvector_centrality_numpy#
- eigenvector_centrality_numpy(G, weight=None, max_iter=50, tol=0)[源代码]#
计算图
G
的特征向量中心性。特征向量中心性通过将其前驱节点的中心性相加来计算节点的中心性。节点 \(i\) 的中心性是与具有最大正模的特征值 \(\lambda\) 相关联的左特征向量的第 \(i\) 个元素。这样的特征向量 \(x\) 由以下方程定义,其中包含一个乘法常数:
\[\lambda x^T = x^T A,\]其中 \(A\) 是图
G
的邻接矩阵。根据行-列乘积的定义,上述方程等价于\[\lambda x_i = \sum_{j\to i}x_j.\]也就是说,将 \(i\) 的前驱节点的特征向量中心性相加即可得到 \(i\) 的特征向量中心性乘以 \(\lambda\)。在无向图的情况下,\(x\) 也满足熟悉的右特征向量方程 \(Ax = \lambda x\)。
根据 Perron–Frobenius 定理 [1],如果
G
是(强)连通的,则存在唯一的特征向量 \(x\),并且其所有分量均为严格正值。然而,如果
G
不是(强)连通的,则可能存在与 \(\lambda\) 相关联的多个左特征向量,并且其中一些分量可能为零。根据选择特征向量的方法,舍入误差可能会影响报告的众多特征向量中的哪一个。这可能导致同一图的不一致结果,底层实现对此不具鲁棒性。因此,仅接受(强)连通图。- 参数:
- G图
一个连通的 NetworkX 图。
- weightNone 或字符串,可选(默认为 None)
如果为
None
,则所有边权重都被视为相等。否则,它保存用作权重的边属性的名称。在此度量中,权重被解释为连接强度。- max_iter整数,可选(默认为 50)
允许的最大 Arnoldi 更新迭代次数。
- tol浮点数,可选(默认为 0)
特征值的相对精度(停止准则)。默认值 0 表示机器精度。
- 返回:
- nodes节点字典
一个字典,键为节点,值为特征向量中心性。关联的向量具有单位欧几里得范数,且值为非负数。
- 抛出异常:
- NetworkXPointlessConcept
如果图
G
是空图。- ArpackNoConvergence
当未达到要求的收敛时。当前已收敛的特征值和特征向量可以在异常对象的 eigenvalues 和 eigenvectors 属性中找到。
- AmbiguousSolution
如果
G
不连通。
注释
特征向量中心性由 Landau [2] 引入用于国际象棋比赛。后来由 Wei [3] 重新发现,并在运动排名领域由 Kendall [4] 推广。Berge 基于社会联系为图引入了通用定义 [5]。Bonacich [6] 再次重新引入特征向量中心性,并在链接分析中使其流行。
此函数计算左主导特征向量,它对应于将前驱节点的中心性相加:这是通常的方法。要将后继节点的中心性相加,首先使用
G.reverse()
反转图。此实现使用
SciPy 稀疏特征值求解器
(ARPACK) 通过 Arnoldi 迭代 [7] 找到最大的特征值/特征向量对。参考文献
[1]Abraham Berman 和 Robert J. Plemmons。《数学科学中的非负矩阵》。应用数学经典。SIAM,1994。
[2]Edmund Landau。《竞赛结果的相对价值评估》。Deutsches Wochenschach, 11:366–369, 1895。
[3]魏德馨。《排名理论的代数基础》。博士论文,剑桥大学,1952。
[4]Maurice G. Kendall。《配对比较理论的进一步贡献》。Biometrics, 11(1):43–62, 1955。 https://www.jstor.org/stable/3001479
[5]Claude Berge。《图论及其应用》。Dunod, 巴黎, 法国, 1958。
[6]Phillip Bonacich。《分析重叠成员关系的技术》。Sociological Methodology, 4:176–185, 1972。 https://www.jstor.org/stable/270732
[7]Arnoldi, W. E. (1951). 《矩阵特征值问题求解中的最小化迭代原理》。Quarterly of Applied Mathematics。9 (1): 17–29。 https://doi.org/10.1090/qam/42792
示例
>>> G = nx.path_graph(4) >>> centrality = nx.eigenvector_centrality_numpy(G) >>> print([f"{node} {centrality[node]:0.2f}" for node in centrality]) ['0 0.37', '1 0.60', '2 0.60', '3 0.37']