# scipy.linalg.pinvh#

scipy.linalg.pinvh(a, atol=None, rtol=None, lower=True, return_rank=False, check_finite=True)[source]#

Compute the (Moore-Penrose) pseudo-inverse of a Hermitian matrix.

Calculate a generalized inverse of a complex Hermitian/real symmetric matrix using its eigenvalue decomposition and including all eigenvalues with ‘large’ absolute value.

Parameters:
a(N, N) array_like

Real symmetric or complex hermetian matrix to be pseudo-inverted

atolfloat, optional

Absolute threshold term, default value is 0.

New in version 1.7.0.

rtolfloat, optional

Relative threshold term, default value is `N * eps` where `eps` is the machine precision value of the datatype of `a`.

New in version 1.7.0.

lowerbool, optional

Whether the pertinent array data is taken from the lower or upper triangle of a. (Default: lower)

return_rankbool, optional

If True, return the effective rank of the matrix.

check_finitebool, optional

Whether to check that the input matrix contains only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination) if the inputs do contain infinities or NaNs.

Returns:
B(N, N) ndarray

The pseudo-inverse of matrix a.

rankint

The effective rank of the matrix. Returned if return_rank is True.

Raises:
LinAlgError

If eigenvalue algorithm does not converge.

`pinv`

Moore-Penrose pseudoinverse of a matrix.

Examples

For a more detailed example see `pinv`.

```>>> import numpy as np
>>> from scipy.linalg import pinvh
>>> rng = np.random.default_rng()
>>> a = rng.standard_normal((9, 6))
>>> a = np.dot(a, a.T)
>>> B = pinvh(a)
>>> np.allclose(a, a @ B @ a)
True
>>> np.allclose(B, B @ a @ B)
True
```