msmtools.analysis.is_connected

msmtools.analysis.is_connected(T, directed=True)

Check connectivity of the given matrix.

Parameters:
  • T ((M, M) ndarray or scipy.sparse matrix) – Matrix to check
  • directed (bool (optional)) – If True respect direction of transitions, if False do not distinguish between forward and backward transitions
Returns:

is_connected – True, if T is connected, False otherwise

Return type:

bool

Notes

A transition matrix \(T=(t_{ij})\) is connected if for any pair of states \((i, j)\) one can reach state \(j\) from state \(i\) in a finite number of steps.

In more precise terms: For any pair of states \((i, j)\) there exists a number \(N=N(i, j)\), so that the probability of going from state \(i\) to state \(j\) in \(N\) steps is positive, \(\mathbb{P}(X_{N}=j|X_{0}=i)>0\).

A transition matrix with this property is also called irreducible.

Viewing the transition matrix as the adjency matrix of a (directed) graph the transition matrix is irreducible if and only if the corresponding graph has a single connected component. Connectivity of a graph can be efficiently checked using Tarjan’s algorithm.

References

[1]Hoel, P G and S C Port and C J Stone. 1972. Introduction to Stochastic Processes.
[2]Tarjan, R E. 1972. Depth-first search and linear graph algorithms. SIAM Journal on Computing 1 (2): 146-160.

Examples

>>> import numpy as np
>>> from msmtools.analysis import is_connected
>>> A = np.array([[0.9, 0.1, 0.0], [0.5, 0.0, 0.5], [0.0, 0.0, 1.0]])
>>> is_connected(A)
False
>>> T = np.array([[0.9, 0.1, 0.0], [0.5, 0.0, 0.5], [0.0, 0.1, 0.9]])
>>> is_connected(T)
True