eigenvector_centrality_numpy#

eigenvector_centrality_numpy(G, weight=None, max_iter=50, tol=0)[source]#

计算图 G 的特征向量中心性。

特征向量中心性通过将其前驱节点的中心性相加来计算节点的中心性。节点 \(i\) 的中心性是与最大模数的特征值 \(\lambda\) 相关联的左特征向量的第 \(i\) 个元素,且该特征向量为正。这样的特征向量 \(x\) 由以下方程定义,直至一个乘法常数:

\[\lambda x^T = x^T A,\]

其中 \(A\) 是图 G 的邻接矩阵。根据行-列乘积的定义,上述方程等价于

\[\lambda x_i = \sum_{j\to i}x_j.\]

即,将节点 \(i\) 的前驱节点的特征向量中心性相加,得到乘以 \(\lambda\) 的节点 \(i\) 的特征向量中心性。对于无向图,\(x\) 也满足熟悉的右特征向量方程 \(Ax = \lambda x\)

根据 Perron-Frobenius 定理 [1],如果 G 是强连通的,则存在唯一的特征向量 \(x\),并且其所有元素严格为正。

如果 G 不是强连通的,可能会有多个与 \(\lambda\) 相关联的左特征向量,并且其中一些元素可能为零。

Parameters:
G

一个 networkx 图。

max_iter整数,可选 (默认=50)

允许的最大 Arnoldi 更新迭代次数。

tol浮点数,可选 (默认=0)

特征值的相对精度(停止准则)。默认值 0 表示机器精度。

weightNone 或字符串,可选 (默认=None)

如果为 None,则所有边权重视为相等。否则,保留用作权重的边属性的名称。在此度量中,权重被解释为连接强度。

Returns:
nodes字典

包含节点及其特征向量中心性值的字典。相关向量具有单位欧几里得范数,且值为非负。

Raises:
NetworkXPointlessConcept

如果图 G 为空图。

ArpackNoConvergence

当未达到请求的收敛时。当前收敛的特征值和特征向量可以在异常对象的特征值和特征向量属性中找到。

Notes

特征向量中心性由 Landau [2] 为国际象棋比赛引入。后来由 Wei [3] 重新发现,并在体育排名的背景下由 Kendall [4] 推广。Berge 基于社交连接为图引入了通用定义 [5]。Bonacich [6] 再次引入了特征向量中心性,并在链接分析中使其流行。

此函数计算左主导特征向量,对应于前驱节点的中心性相加:这是通常的方法。要首先添加后继节点的中心性,请使用 G.reverse() 反转图。

此实现使用 SciPy 稀疏特征值求解器 (ARPACK) 通过 Arnoldi 迭代 [7] 找到最大特征值/特征向量对。

References

[1]

Abraham Berman 和 Robert J. Plemmons。 “Nonnegative Matrices in the Mathematical Sciences.” Classics in Applied Mathematics. SIAM, 1994.

[2]

Edmund Landau。 “Zur relativen Wertbemessung der Turnierresultate.” Deutsches Wochenschach, 11:366–369, 1895.

[3]

Teh-Hsing Wei。 “The Algebraic Foundations of Ranking Theory.” PhD thesis, University of Cambridge, 1952.

[4]

Maurice G. Kendall。 “Further contributions to the theory of paired comparisons.” Biometrics, 11(1):43–62, 1955. https://www.jstor.org/stable/3001479

[5]

Claude Berge “Théorie des graphes et ses applications.” Dunod, Paris, France, 1958.

[6]

Phillip Bonacich。 “Technique for analyzing overlapping memberships.” Sociological Methodology, 4:176–185, 1972. https://www.jstor.org/stable/270732

Examples

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