log determinant of sparse matrices

Cholesky factorization

Given matrix $M$ is hermitian (symmetric if real) positive definite matrix, cholesky factorization breaks allows $M$ to be written as $M = LL^T$ where $L$ is a lower triangular matrix with real positive diagonals.

$$\begin{align*} M &= LL^T\\ \det(M) &= \det(L)^2 \\ \log (\det(M)) &= 2 \log(\det(L)) \\ &= 2 \log \sum_{i}L_{ii} \end{align*}$$

In [1]:
from scikits.sparse.cholmod import cholesky
from scipy.sparse import issparse
from scipy.sparse import rand
M = rand(2000, 2000, density=0.2, format='csr')

In [2]:
## Symmetric positive definite
M = M.dot(M.T)

In [3]:
factor = cholesky(M)
ld = factor.logdet()


/home/saket/anaconda2/envs/csci599/lib/python3.5/site-packages/ipykernel/__main__.py:1: CholmodTypeConversionWarning: converting matrix of class csr_matrix to CSC format
  if __name__ == '__main__':

In [4]:
ld


Out[4]:
7467.4303585988573