[NumPy-Tickets] [NumPy] #1402: Provide a function to compute the log-determinant

NumPy Trac numpy-tickets@scipy....
Fri Feb 19 01:27:16 CST 2010


#1402: Provide a function to compute the log-determinant
-------------------------+--------------------------------------------------
 Reporter:  njs          |       Owner:  somebody
     Type:  enhancement  |      Status:  new     
 Priority:  normal       |   Milestone:          
Component:  Other        |     Version:          
 Keywords:               |  
-------------------------+--------------------------------------------------
 For large matrices, computing the determinant directly may cause overflow
 or underflow. But in many cases (e.g., doing maximum-likelihood
 calculations with multivariate normals), all one really wants to calculate
 is the log-determinant, which is not subject to these numerical issues.

 Attached patch adds a function 'sign_log_det' to np.linalg. The idea is
 that it returns the sign of the determinant (as a number with absolute
 value 1) and the log of the absolute value. This avoids introducing
 complex numbers when calculating the determinant of a real matrix (and
 anyway the absolute value is often what's of interest anyway).

 It also changes the ordinary 'det' function to be a simple wrapper around
 'sign_log_det'; as a side-effect, it becomes somewhat more robust against
 ill-conditioned matrices. For instance, without this patch,
 np.linalg.det([[1e300, 0], [0, 1e-300]]) returns 0; with this patch, it
 (correctly) returns 1.

 Tests and docs included; patch is against r8128.

 I'd like to get this API settled, because I'm adding similar functions for
 sparse matrices to my scikits.sparse library, and I'd like to be
 consistent with whatever numpy does.

-- 
Ticket URL: <http://projects.scipy.org/numpy/ticket/1402>
NumPy <http://projects.scipy.org/numpy>
My example project


More information about the NumPy-Tickets mailing list