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, rcond : float or None

Cutoff for ‘small’ eigenvalues. Singular values smaller than rcond * largest_eigenvalue are considered zero.

If None or -1, suitable machine precision is used.

lower : bool

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

return_rank : bool, optional

if True, return the effective rank of the matrix

check_finite : boolean, optional

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

Returns :

B : (N, N) ndarray

The pseudo-inverse of matrix a.

rank : int

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

Raises :

LinAlgError :

If eigenvalue does not converge


>>> from numpy import *
>>> a = random.randn(9, 6)
>>> a =, a.T)
>>> B = pinvh(a)
>>> allclose(a, dot(a, dot(B, a)))
>>> allclose(B, dot(B, dot(a, B)))

Previous topic


Next topic