Most of us would be familiar with the term inverse while operating with matrices. But what on earth is a pseudo-inverse? If it is pseudo which in turn means a false entity, then why bother using it? This seemingly contradicting function is what we would be exploring in this article. The *linalg.pinv( ) *function is within the *numpy *library of Python, so let us get started by importing this library using the below code.

```
import numpy as np
```

Thereafter, we shall explore further the aforementioned function through each of the following sections.

**Why and when to use a pseudo-inverse of a matrix?****Syntax of the***linalg.pinv( )*function**Use cases for the***linalg.**p*function**inv( )**

**Why and when to use a pseudo-inverse of a matrix?**

It is time that we face the questions posed in the introduction of this article, heads on! The pseudo-inverse also known as the Moore-Penrose inverse named after those who introduced it finds its application in linear algebra. The pre-requisites for any matrix to be inverted are,

- It should be a non-singular matrix
- It should be a square matrix

All those that do not satisfy both of the above conditions cannot be inverted. But in most cases, while trying to solve a linear system of equations, the coefficient matrix will not be in line with the first condition. They find it hard to be a square matrix.

So, it makes it difficult to solve and find a solution directly. Thusly, a technique known as Singular Value Decomposition (SVD) is being used to deduce the best available solution by approximation and the inverse of the matrix generated by this process is called the pseudo-inverse.

**Syntax ofÂ the ***linalg.pinv( )*Â function

*linalg.pinv( )*Â function

Given below is the syntax of the *linalg.pinv( ) *function detailing the fundamental constituents required for its proper functioning.

```
numpy.linalg.pinv(a, rcond=1e-15, hermitian=False)
```

where,

A matrix or a stack of matrices that are to be pseudo-inverted*a â€“*Threshold for small singular values set to â€˜1e-15â€™ by default. Those below the product of*rcond â€“**rcond*and the largest singular value will be set to zeroSet to â€˜Falseâ€™ by default and is used to declare whether â€˜*hermitian â€“**aâ€™*contains symmetric real-valued matri(x)ces

**Use cases for the ***linalg.pinv( )* function

*linalg.pinv( )*function

To demonstrate the working of the *linalg.pinv( ) *function*, *let us create a couple of matrices with dimensions 3×4 and 4×1 respectively. Since the demonstration is to be done with the matrices, let us use the *matrix( ) *function from the *numpy *library for this purpose.

```
A = np.matrix([[-1, 2, 3,7],
[12, 31, 5, 9],
[1, -9, 4, 17]])
B = np.matrix([[2],
[0],
[20],
[-3]])
```

Now let us find the product of the above two matrices using the following code for matrix multiplication.

```
AB = [email protected]
print(AB)
```

Once done, let us move on with finding the pseudo-inverse of the resultant matrix given above using the *linalg.pinv( ) *function as shown below.

```
I = np.linalg.pinv(AB)
print(I)
```

A comparison of the resultant matrix before and after being pseudo-inverted would give a clear idea of its functioning. The conventional technique of inversion does not allow this resultant matrix to be inverted since it is not square in dimensions. But, the *linalg.pinv( ) *gives a near approximation using the *SVD*.

At times, there might be an error code â€“ *LinAlgError *â€“ that pops up. This happens when the results of the *SVD* do not converge.

**Conclusion**

Now that we have reached the end of this article, hope it has elaborated on how to use the *linalg.pinv( )* function from the *numpy* library. Hereâ€™s another article that details the usage of the *linalg.tensorinv ( )* function from the *numpy* library in Python. There are numerous other enjoyable and equally informative articles in AskPython that might be of great help to those who are looking to level up in Python. *Carpe diem!*