# NumPy: Inverse of a Matrix

In this tutorial, we will make use of NumPy's `numpy.linalg.inv()`

function to find the inverse of a square matrix.

In Linear Algebra, an identity matrix (or unit matrix) of size $n$ is an $n \times n$ square matrix with $1$'s along the main diagonal and $0$'s elsewhere.

An identity matrix of size $n$ is denoted by $I_{n}$.

$$ I_{1} = \begin{bmatrix} 1 \end{bmatrix} , I_{2} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \\ \end{bmatrix} , I_{3} = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix} , I_{4} = \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} , ... $$

An inverse of a square matrix $A$ of order $n$ is the matrix $A^{-1}$ of the same order, such that, their product results in an identity matrix $I_{n}$.

$$ AA^{-1} = A^{-1}A = I_{n} $$

An inverse of a matrix is also known as a reciprocal matrix.

Now we pick an example matrix from a Schaum's Outline Series book Theory and Problems of Matrices by Frank Aryes, Jr^{1}.

$$ \begin{bmatrix} 1 & 2 & 3 \\ 1 & 3 & 3 \\ 1 & 2 & 4 \end{bmatrix} $$

We will use NumPy's numpy.linalg.inv() function to find its inverse. The NumPy code is as follows.

` ````
import numpy as np
a = np.array([[1, 2, 3], [1, 3, 3], [1, 2, 4]])
ainv = np.linalg.inv(a)
print(ainv)
```

Executing the above script, we get the matrix

` ````
[[ 6. -2. -3.]
[-1. 1. 0.]
[-1. 0. 1.]]
```

which is its inverse. You can verify the result using the numpy.allclose() function. Since the resulting inverse matrix is a $3 \times 3$ matrix, we use the `numpy.eye()`

function to create an identity matrix. If the generated inverse matrix is correct, the output of the below line will be `True`

.

` ````
print(np.allclose(np.dot(ainv, a), np.eye(3)))
```

## Notes

- 1) Frank Aryes, Jr., Theory and Problems of Matrices. New York: Schaum Publishing Co., 1962. Chapter 2: Some Types of Matrices, p. 11, Example 1