directed_modularity_matrix(G, nodelist=None, weight=None)[source]#

Returns the directed modularity matrix of G.

The modularity matrix is the matrix B = A - <A>, where A is the adjacency matrix and <A> is the expected adjacency matrix, assuming that the graph is described by the configuration model.

More specifically, the element B_ij of B is defined as

\[B_{ij} = A_{ij} - k_i^{out} k_j^{in} / m\]

where \(k_i^{in}\) is the in degree of node i, and \(k_j^{out}\) is the out degree of node j, with m the number of edges in the graph. When weight is set to a name of an attribute edge, Aij, k_i, k_j and m are computed using its value.


A NetworkX DiGraph

nodelistlist, optional

The rows and columns are ordered according to the nodes in nodelist. If nodelist is None, then the ordering is produced by G.nodes().

weightstring or None, optional (default=None)

The edge attribute that holds the numerical value used for the edge weight. If None then all edge weights are 1.

BNumpy array

The modularity matrix of G.

See also



NetworkX defines the element A_ij of the adjacency matrix as 1 if there is a link going from node i to node j. Leicht and Newman use the opposite definition. This explains the different expression for B_ij.



E. A. Leicht, M. E. J. Newman, “Community structure in directed networks”, Phys. Rev Lett., vol. 100, no. 11, p. 118703, 2008.


>>> G = nx.DiGraph()
>>> G.add_edges_from(
...     (
...         (1, 2),
...         (1, 3),
...         (3, 1),
...         (3, 2),
...         (3, 5),
...         (4, 5),
...         (4, 6),
...         (5, 4),
...         (5, 6),
...         (6, 4),
...     )
... )
>>> B = nx.directed_modularity_matrix(G)

Additional backends implement this function

graphblas : OpenMP-enabled sparse linear algebra backend.