SciPy

scipy.linalg.pinv

scipy.linalg.pinv(a, cond=None, rcond=None, return_rank=False, check_finite=True)[source]

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

Calculate a generalized inverse of a matrix using a least-squares solver.

Parameters
a(M, N) array_like

Matrix to be pseudo-inverted.

cond, rcondfloat, optional

Cutoff factor for ‘small’ singular values. In lstsq, singular values less than cond*largest_singular_value will be considered as zero. If both are omitted, the default value max(M, N) * eps is passed to lstsq where eps is the corresponding machine precision value of the datatype of a.

Changed in version 1.3.0: Previously the default cutoff value was just eps without the factor max(M, N).

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, M) ndarray

The pseudo-inverse of matrix a.

rankint

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

Raises
LinAlgError

If computation does not converge.

Examples

>>> from scipy import linalg
>>> a = np.random.randn(9, 6)
>>> B = linalg.pinv(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.lstsq

Next topic

scipy.linalg.pinv2