Find out if matrix is positive definite with numpy

后端 未结 8 2133
慢半拍i
慢半拍i 2020-12-23 13:40

I need to find out if matrix is positive definite. My matrix is numpy matrix. I was expecting to find any related method in numpy library, but no success. I appreciate any

相关标签:
8条回答
  • 2020-12-23 14:01

    You can also check if all the eigenvalues of matrix are positive, if so the matrix is positive definite:

    import numpy as np
    
    def is_pos_def(x):
        return np.all(np.linalg.eigvals(x) > 0)
    
    0 讨论(0)
  • 2020-12-23 14:03

    If you specifically want symmetric (hermitian, if complex) positive SEMI-definite matrices than the below will do. If you don't care about symmetry (hermitian, if complex) remove the 'if' state that checks for it. If you want positive definite rather than positive SEMI-definite than remove the regularization line (and change the value passed to 'np.lingalg.cholesky()' from 'regularized_X' to 'X'). The below

    import numpy as np
    
    def is_hermitian_positive_semidefinite(X):
        if X.shape[0] != X.shape[1]: # must be a square matrix
            return False
    
        if not np.all( X - X.H == 0 ): # must be a symmetric or hermitian matrix
            return False
    
        try: # Cholesky decomposition fails for matrices that are NOT positive definite.
    
            # But since the matrix may be positive SEMI-definite due to rank deficiency
            # we must regularize.
            regularized_X = X + np.eye(X.shape[0]) * 1e-14
    
            np.linalg.cholesky(regularized_X)
        except np.linalg.LinAlgError:
            return False
    
        return True
    
    0 讨论(0)
提交回复
热议问题