Tutorial Example

Python Create a Random Orthogonal Matrix: A Beginner Guide – Python Tutorial

Orthogonal matrix is an important matrix in linear algebra, it is also widely used in machine learning. In this tutorial, we will dicuss what it is and how to create a random orthogonal matrix with pyhton.

What is Orthogonal Matrix?

If a matrix A is an orthogonal matrix, it shoud be n*n.

The feature of an orthogonal matrix A.

The euclidean length of A.

How to create a random orthogonal matrix?

The simplest orthogonal matrix is one-hot encoding, such as:

[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]

However, the value in it is not random. How to create a random orthogonal matrix?

Here is an simple example, we will use python scipy to implement it.

from scipy.stats import ortho_group # Requires version 0.18 of scipy
import numpy as np

m = ortho_group.rvs(dim=5)
print(m)

Here we will create a 5 * 5 random orthogonal matrix, it is:

[[-0.04861857 -0.44507735 -0.38079495  0.31292116 -0.74606833]
 [-0.20933804  0.4058631   0.35547015 -0.52018465 -0.62809365]
 [ 0.53353666  0.63968878 -0.53749448  0.05881791 -0.11737561]
 [ 0.45728819  0.08815114  0.66040851  0.55928113 -0.18488401]
 [ 0.67826246 -0.46926426  0.05997047 -0.56145645 -0.03035287]]

We check it is an orthogonal matrix or not.

l1 = np.matmul(m, m.T)
print(l1)
l2 = np.matmul(m.T, m)
print(l2)

The result is:

[[ 1.00000000e+00  7.84994566e-17  1.65829696e-16 -1.31158853e-16  -9.57636165e-18]
 [ 7.84994566e-17  1.00000000e+00 -1.98313914e-16  1.25646971e-16  5.00488907e-17]
 [ 1.65829696e-16 -1.98313914e-16  1.00000000e+00 -9.72148193e-17  -2.25065344e-17]
 [-1.31158853e-16  1.25646971e-16 -9.72148193e-17  1.00000000e+00  9.59854042e-17]
 [-9.57636165e-18  5.00488907e-17 -2.25065344e-17  9.59854042e-17  1.00000000e+00]]
[[ 1.00000000e+00  8.75665129e-17 -1.39245100e-16  1.47515708e-16  6.06719417e-17]
 [ 8.75665129e-17  1.00000000e+00 -4.07319982e-17  1.76818401e-17  -5.21988496e-17]
 [-1.39245100e-16 -4.07319982e-17  1.00000000e+00 -1.89462221e-16  2.42141102e-17]
 [ 1.47515708e-16  1.76818401e-17 -1.89462221e-16  1.00000000e+00  1.42728087e-16]
 [ 6.06719417e-17 -5.21988496e-17  2.42141102e-17  1.42728087e-16  1.00000000e+00]]

From the result, we will find the matrix m is a random orthogonal matrix.