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.

Examples

>>> 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