SciPy

scipy.linalg.pinvh

scipy.linalg.pinvh(a, cond=None, rcond=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 Hermitian or 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

cond, rcondfloat or None

Cutoff for ‘small’ singular values; singular values smaller than this value are considered as zero. If both are omitted, the default max(M,N)*largest_eigenvalue*eps is used where eps is the machine precision value of the datatype of a.

Changed in version 1.3.0: Previously the default cutoff value was just eps*f where f was 1e3 for single precision and 1e6 for double precision.

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 does not converge

Examples

>>> from scipy.linalg import pinvh
>>> a = np.random.randn(9, 6)
>>> a = np.dot(a, a.T)
>>> B = pinvh(a)
>>> np.allclose(a, np.dot(a, np.dot(B, a)))
True
>>> np.allclose(B, np.dot(B, np.dot(a, B)))
True

Previous topic

scipy.linalg.pinv2

Next topic

scipy.linalg.kron