Returns subgraph communicability for all pairs of nodes in G.

Communicability betweenness measure makes use of the number of walks connecting every pair of nodes as the basis of a betweenness centrality measure.

G: graph

Dictionary of nodes with communicability betweenness as the value.


If the graph is not undirected and simple.


Let G=(V,E) be a simple undirected graph with n nodes and m edges, and A denote the adjacency matrix of G.

Let G(r)=(V,E(r)) be the graph resulting from removing all edges connected to node r but not the node itself.

The adjacency matrix for G(r) is A+E(r), where E(r) has nonzeros only in row and column r.

The subraph betweenness of a node r is [1]

\[\omega_{r} = \frac{1}{C}\sum_{p}\sum_{q}\frac{G_{prq}}{G_{pq}}, p\neq q, q\neq r,\]

where G_{prq}=(e^{A}_{pq} - (e^{A+E(r)})_{pq} is the number of walks involving node r, G_{pq}=(e^{A})_{pq} is the number of closed walks starting at node p and ending at node q, and C=(n-1)^{2}-(n-1) is a normalization factor equal to the number of terms in the sum.

The resulting omega_{r} takes values between zero and one. The lower bound cannot be attained for a connected graph, and the upper bound is attained in the star graph.



Ernesto Estrada, Desmond J. Higham, Naomichi Hatano, “Communicability Betweenness in Complex Networks” Physica A 388 (2009) 764-774.


>>> G = nx.Graph([(0, 1), (1, 2), (1, 5), (5, 4), (2, 4), (2, 3), (4, 3), (3, 6)])
>>> cbc = nx.communicability_betweenness_centrality(G)
>>> print([f"{node} {cbc[node]:0.2f}" for node in sorted(cbc)])
['0 0.03', '1 0.45', '2 0.51', '3 0.45', '4 0.40', '5 0.19', '6 0.03']