pinv#
- scipy.linalg.pinv(a, *, atol=None, rtol=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 its singular-value decomposition - U @ S @ Vin the economy mode and picking up only the columns/rows that are associated with significant singular values.- If - sis the maximum singular value of- a, then the significance cut-off value is determined by- atol + rtol * s. Any singular value below this value is assumed insignificant.- Parameters:
- a(M, N) array_like
- Matrix to be pseudo-inverted. 
- atolfloat, optional
- Absolute threshold term, default value is 0. - Added in version 1.7.0. 
- rtolfloat, optional
- Relative threshold term, default value is - max(M, N) * epswhere- epsis the machine precision value of the datatype of- a.- Added in version 1.7.0. 
- 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 is True. 
 
- Raises:
- LinAlgError
- If SVD computation does not converge. 
 
 - See also - pinvh
- Moore-Penrose pseudoinverse of a hermitian matrix. 
 - Notes - If - Ais invertible then the Moore-Penrose pseudoinverse is exactly the inverse of- A[1]. If- Ais not invertible then the Moore-Penrose pseudoinverse computes the- xsolution to- Ax = bsuch that- ||Ax - b||is minimized [1].- References - Examples - Given an - m x nmatrix- Aand an- n x mmatrix- Bthe four Moore-Penrose conditions are:- ABA = A(- Bis a generalized inverse of- A),
- BAB = B(- Ais a generalized inverse of- B),
- (AB)* = AB(- ABis hermitian),
- (BA)* = BA(- BAis hermitian) [1].
 - Here, - A*denotes the conjugate transpose. The Moore-Penrose pseudoinverse is a unique- Bthat satisfies all four of these conditions and exists for any- A. Note that, unlike the standard matrix inverse,- Adoes not have to be a square matrix or have linearly independent columns/rows.- As an example, we can calculate the Moore-Penrose pseudoinverse of a random non-square matrix and verify it satisfies the four conditions. - >>> import numpy as np >>> from scipy import linalg >>> rng = np.random.default_rng() >>> A = rng.standard_normal((9, 6)) >>> B = linalg.pinv(A) >>> np.allclose(A @ B @ A, A) # Condition 1 True >>> np.allclose(B @ A @ B, B) # Condition 2 True >>> np.allclose((A @ B).conj().T, A @ B) # Condition 3 True >>> np.allclose((B @ A).conj().T, B @ A) # Condition 4 True