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()
In [4]:
ld
Out[4]: