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.- The documentation is written assuming array arguments are of specified “core” shapes. However, array argument(s) of this function may have additional “batch” dimensions prepended to the core shape. In this case, the array is treated as a batch of lower-dimensional slices; see Batched Linear Operations for details. - 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