# Inverse of Matrix in Python

Manav Narula Jan 30, 2023 Mar 11, 2022

A matrix is a two-dimensional array with every element of the same size. We can represent matrices using `numpy` arrays or nested lists.

For a non-singular matrix whose determinant is not zero, there is a unique matrix that yields an identity matrix when multiplied with the original. This unique matrix is called the inverse of the original matrix.

This tutorial will demonstrate how to inverse a matrix in Python using several methods.

## Use the `numpy.linalg.inv()` Function to Find the Inverse of a Matrix in Python

The `numpy` module has different functionalities to create and manipulate arrays in Python. The `numpy.linalg` submodule implements different linear algebra algorithms and functions.

We can use the `numpy.linalg.inv()` function from this module to compute the inverse of a given matrix. This function raises an error if the inverse of a matrix is not possible, which can be because the matrix is singular.

Therefore, using this function in a `try` and `except` block is recommended. If the matrix is singular, an error will be raised, and the code in the `except` block will be executed.

Code Snippet:

``````import numpy as np
try:
m = np.array([[4,3],[8,5]])
print(np.linalg.inv(m))
except:
print("Singular Matrix, Inverse not possible.")
``````

Output:

``````[[-1.25  0.75]
[ 2.   -1.  ]]
``````

## Use the `numpy.matrix` Class to Find the Inverse of a Matrix in Python

For a long time, the `numpy.matrix` class was used to represent matrices in Python. This is the same as using a normal two-dimensional array for matrix representation.

A `numpy.matrix` object has the attribute `numpy.matrix.I` computed the inverse of the given matrix. It also raises an error if a singular matrix is used.

Code Snippet:

``````import numpy as np
try:
m = np.matrix([[4,3],[8,5]])
print(m.I)
except:
print("Singular Matrix, Inverse not possible.")
``````

Output:

``````[[-1.25  0.75]
[ 2.   -1.  ]]
``````

Although both the methods work the same internally, using the `numpy.matrix` class is discouraged. This is because it has been deprecated and ambiguous while working with `numpy` arrays.

## Use the `scipy.linalg.inv()` Function to Find the Inverse of a Matrix in Python

We can use the `scipy` module to perform different scientific calculations using its functionalities. It works well with `numpy` arrays as well.

The `scipy.linalg.inv()` can also return the inverse of a given square matrix in Python. It works the same way as the `numpy.linalg.inv()` function.

Code Snippet:

``````import numpy as np
from scipy import linalg
try:
m = np.matrix([[4,3],[8,5]])
print(linalg.inv(m))
except:
print("Singular Matrix, Inverse not possible.")
``````

Output:

``````[[-1.25  0.75]
[ 2.   -1.  ]]
``````

## Create a User-Defined Function to Find the Inverse of a Matrix in Python

We can implement the mathematical logic for calculating an inverse matrix in Python. For this, we will use a series of user-defined functions.

We will create different functions to return the determinants, transpose, and matrix determinants. These functions will be used in a function that will return the final inverse.

This method works when we represent a matrix as a list of lists in Python.

Code Snippet:

``````def return_transpose(mat):
return map(list,zip(*mat))

def return_matrix_minor(mat,i,j):
return [row[:j] + row[j+1:] for row in (mat[:i]+mat[i+1:])]

def return_determinant(mat):
if len(mat) == 2:
return mat*mat-mat*mat

determinant = 0
for c in range(len(m)):
determinant += ((-1)**c)*m[c]*return_determinant(return_matrix_minor(m,0,c))
return determinant

def inverse_matrix(m):
determinant = return_determinant(m)
if len(m) == 2:
return [[m/determinant, -1*m/determinant],
[-1*m/determinant, m/determinant]]

cfs = []
for r in range(len(m)):
cfRow = []
for c in range(len(m)):
minor = return_matrix_minor(m,r,c)
cfRow.append(((-1)**(r+c)) * return_determinant(minor))
cfs.append(cfRow)
cfs = return_transpose(cfs)
for r in range(len(cfs)):
for c in range(len(cfs)):
cfs[r][c] = cfs[r][c]/determinant
return cfs

m = [[4,3],[8,5]]
print(inverse_matrix(m))
``````

Output:

``````[[-1.25, 0.75], [2.0, -1.0]]
``````

The above example returns a nested list that represents the given matrix’s inverse.

To wrap up, we discussed several methods to find the inverse of a matrix in Python. The `numpy` and `scipy` modules have the `linalg.inv()` function that computes the inverse of a matrix.

We can also use the `numpy.matrix` class to find the inverse of a matrix. Finally, we discussed a series of user-defined functions that compute the inverse by implementing the arithmetical logic.

Author: Manav Narula

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.