Search code examples
pythonpython-3.xnumpymatrixassert

How to use assert with condition to check on every element in a matrix in Python?


I am checking if a matrix is positive definite by computing the eigenvalues of the matrix.

matrix = np.array([[0.0070123 , 0.00578589, 0.01867008, 0.00351521, 0.00151787],
       [0.00578589, 0.00590836, 0.01657745, 0.00304733, 0.0013278 ],
       [0.01867008, 0.01657745, 0.0555186 , 0.01004483, 0.00439243],
       [0.00351521, 0.00304733, 0.01004483, 0.00270608, 0.00080408],
       [0.00151787, 0.0013278 , 0.00439243, 0.00080408, 0.00084371]])

eigenvalues = np.linalg.eievals(matrix)

Out[20]: array([0.06913077, 0.0004869 , 0.00057456, 0.0009318 , 0.00086503])

Apparently, this matrix is positive definite since all eigenvalues are greater than 0. Now I wish to use assert to make sure this matrix always stays positive definite, that is, all eigenvalues are greater than 0, since I will put this code into a function. I know np.where can be used to check on condition and return the desired output/elements, but I wonder if I can apply this with assert? Or is there any better way I can compute this?


Solution

  • You can do this using np.all which returns True if all elements of an array are True and returns False otherwise. More details in the docs:

    The following code should achieve what you want

    assert np.all(eigenvalues > 0)
    

    If you are trying to raise an error, you can use np.any which returns True if at least one element of the array is True

    if np.any(eigenvalues <= 0):
        raise YourError