In this tutorial, we will look at how to check if a numpy matrix (a 2d numpy array) is orthogonal or not with the help of some examples.
When is a matrix orthogonal?
A real square matrix, for example,
M is said to be orthogonal, if the dot product of the matrix with its transpose is an identity matrix. We can also say that a matrix is orthogonal if its transpose is equal to its inverse. The following image shows an orthogonal matrix.
How to check if a matrix is invertible in Numpy?
To check if a square matrix is invertible or not in Numpy, check if it the dot product of the matrix with its transpose is an identity matrix of the same shape or not.
Use the following steps –
- Compute the transpose of the matrix using the
- Compute the dot product of the matrix with this transpose using the
- Create an identity matrix of the same shape as the original square matrix.
- Check if the resulting matrix from the dot product is equal to the identity matrix using the
Alternatively, you can check if the transpose of the matrix is equal to its inverse.
Let’s now look at the above method with the help of some examples. First, we will create two matrices that we will use throughout this tutorial, one orthogonal and the other not orthogonal.
import numpy as np # create matrices ar1 = np.array([ [0, 1, 0], [-1, 0, 0], [0, 0, 1] ]) ar2 = np.array([ [1, 2, 3], [0, 0, 2], [4, 5, 6] ])
Here, the matrix
ar1 is orthogonal and the matrix
ar2 is not orthogonal.
Example 1 – Using dot product with the transpose
Here, we compare the dot product of the matrix and its inverse to an identity matrix to check whether the matrix is orthogonal or not. Let’s check if the array
ar1 created above is transpose or not.
# dot product of matrix and its transpose dot_product = np.dot(ar1, ar1.T) # create an identity matrix of the same shape as ar1 identity_matrix = np.identity(len(ar1)) # check if matrix is orthogonal print(np.allclose(dot_product, identity_matrix))
True as the output. Here, we are using
numpy.allclose() function to compare the values in the matrices for equality because this function lets you define a tolerance to determine how close two values need to be to be considered equal. By default, the tolerance is set to 1e-05, which means that two values are considered equal if they are within 0.00001 of each other. You can adjust this tolerance by passing a different value to the
rtol (relative tolerance) or
atol (absolute tolerance) parameters of
Alternatively, you can use the
numpy.array_equal() method to compare two matrices for equality but it’ll check for the exact equality of the values which may be a problem if the float values in the machine are represented with high precision.
Let’s now apply this method on
ar2 which is not an orthogonal matrix.
# dot product of matrix and its transpose dot_product = np.dot(ar2, ar2.T) # create an identity matrix of the same shape as ar2 identity_matrix = np.identity(len(ar2)) # check if matrix is orthogonal print(np.allclose(dot_product, identity_matrix))
False as the output.
Example 2 – Compare the transpose with the inverse
If a matrix is orthogonal, its transpose will be equal to its inverse. Thus, we can compute the transpose and the inverse of the matrix and check if they are equal or not to determine if the matrix is orthogonal.
numpy.linalg.inv() function to get the inverse of a matrix. If the matrix cannot be inverted, it raises a
Let’s apply this method on the array
# check if matrix is orthogonal print(np.allclose(ar1.T, np.linalg.inv(ar1)))
We get the correct result.
Let’s apply this method on
# check if matrix is orthogonal print(np.allclose(ar2.T, np.linalg.inv(ar2)))
We get the correct result.
You might also be interested in –
- Numpy – Check If a Matrix is Invertible
- How to check if a matrix is symmetric in Numpy?
- How to check if a matrix is a square matrix in Numpy?
Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.