Efficiently compute the Determinant of a Banded Matrix

So I've got a large (~ 2 million x 2 million) positive semi-definite, banded, square matrix that I need to find the determinant of. What is the correct way to efficiently compute the determinant of a large, banded matrix?

I'm currently computing the eigenvalues and using their product to compute the determinant, but this takes far too long (orders of magnitude longer than 'inverting' the matrix (i.e solving $\mathbf{y} = \mathbf{C}^{-1}\mathbf{x}$)).

Ultimately I'm computing a multivariate Gaussian likelihood, but that's not so important to my question. I should add that I'm using LAPACK code (wrapped up in the python package SciPy), so it's unlikely that it's a code bug.

• Can you elaborate at all about the nature of the "bandedness" of your matrix (tridiagonal, pentadiagonal, etc.)? Also, I presume that this matrix is not symmetric/Hermitian? Furthermore, are you sure that the matrix is only positive-semidefinite (it would be nicer if it were positive-definite but I want you to clarify)? – Xoque55 Nov 19 '15 at 3:25