拉普拉斯中心性#
- laplacian_centrality(G, normalized=True, nodelist=None, weight='weight', walk_type=None, alpha=0.95)[source]#
计算图
G
中节点的拉普拉斯中心性。节点
i
的拉普拉斯中心性通过删除节点i
后图的拉普拉斯能量下降量来衡量。拉普拉斯能量是图的拉普拉斯矩阵的特征值的平方和。\[ \begin{align}\begin{aligned}C_L(u_i,G) = \frac{(\Delta E)_i}{E_L (G)} = \frac{E_L (G)-E_L (G_i)}{E_L (G)}\\E_L (G) = \sum_{i=0}^n \lambda_i^2\end{aligned}\end{align} \]其中 \(E_L (G)\) 是图
G
的拉普拉斯能量,E_L (G_i) 是删除节点i
后图G
的拉普拉斯能量,\(\lambda_i\) 是G
的拉普拉斯矩阵的特征值。此公式表示归一化后的值。不进行归一化时,返回右侧公式的分子部分。- 参数:
- G图
一个 networkx 图
- normalized布尔值 (默认 = True)
如果为 True,则中心性得分会进行缩放,使所有节点的总和为 1。如果为 False,则每个节点的中心性得分是移除该节点时拉普拉斯能量的下降量。
- nodelist列表, 可选 (默认 = None)
行和列按照 nodelist 中的节点顺序排列。如果 nodelist 为 None,则顺序由 G.nodes() 生成。
- weight: 字符串或 None, 可选 (默认=`'weight'`):
计算拉普拉斯矩阵的可选参数
weight
。用于计算矩阵中每个值的边数据键。如果为 None,则每条边的权重为 1。- walk_type字符串或 None, 可选 (默认=None)
调用
directed_laplacian_matrix
时使用的可选参数walk_type
。可以是"random"
、"lazy"
或"pagerank"
之一。如果walk_type=None
(默认值),则根据G
的属性选择一个值: - 如果G
是强连通且非周期图,则walk_type="random"
- 如果G
是强连通但周期图,则walk_type="lazy"
- 对于所有其他情况,则walk_type="pagerank"
。- alpha实数 (默认 = 0.95)
调用
directed_laplacian_matrix
时使用的可选参数alpha
。(1 - alpha) 是与 pagerank 一起使用的传送概率。
- 返回:
- nodes字典
一个字典,键是节点,值是其拉普拉斯中心性。
- 抛出:
- NetworkXPointlessConcept
如果图
G
是空图。- ZeroDivisionError
如果图
G
没有边(是空图)并且请求了归一化。
注意
该算法基于 [1] 实现,并使用
directed_laplacian_matrix
函数扩展到有向图。参考文献
[1]Qi, X., Fuller, E., Wu, Q., Wu, Y., and Zhang, C.-Q. (2012). Laplacian centrality: A new centrality measure for weighted networks. Information Sciences, 194:240-253. https://math.wvu.edu/~cqzhang/Publication-files/my-paper/INS-2012-Laplacian-W.pdf
示例
>>> G = nx.Graph() >>> edges = [(0, 1, 4), (0, 2, 2), (2, 1, 1), (1, 3, 2), (1, 4, 2), (4, 5, 1)] >>> G.add_weighted_edges_from(edges) >>> sorted((v, f"{c:0.2f}") for v, c in laplacian_centrality(G).items()) [(0, '0.70'), (1, '0.90'), (2, '0.28'), (3, '0.22'), (4, '0.26'), (5, '0.04')]