[Numpy-discussion] inversion of large matrices

Dan Elliott danelliottster at gmail.com
Mon Aug 30 22:19:46 EDT 2010


Thanks for the reply.

David Warde-Farley <dwf <at> cs.toronto.edu> writes:
> On 2010-08-30, at 11:28 AM, Daniel Elliott wrote:
> > Large matrices (e.g. 10K x 10K)
> 
> > Is there a function for performing the inverse or even the pdf of a
> > multinomial normal in these situations as well?
> 
> There's a function for the inverse, but you almost never want to use it, 
especially if your goal is the
> multivariate normal density. A basic explanation of why is available here:
> http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/ 
> 
> In the case of the multivariate normal density the covariance is assumed to be 
positive definite, and thus a
> Cholesky decomposition is appropriate. scipy.linalg.solve() (NOT 
numpy.linalg.solve()) with the
> sym_pos=True argument will do this for you.

You don't think this will choke on a large (e.g. 10K x 10K) covariance matrix?  

Given what you know about how it computes the log determinant and how the 
Cholesky decomposition, do you suppose I would be better off using eigen-
decomposition to do this since I will also get the determinant from the sum of 
the logs of the eigenvalues?

> What do you mean by a "multinomial normal"? Do you mean multivariate normal? 
Offhand I can't remember if it
> exists in scipy.stats, but I know there's code for it in PyMC.

Oops, I meant multivariate normal.  I found code in the pymix library and so far 
I like what I see there.  I am sure it works well for most cases.  However, with 
the exception of one R library, I have never found a packaged implementation 
that works on covariance matrices as large as what I am talking about above.




More information about the NumPy-Discussion mailing list