vectorspace_orthonormalization: Converts a set of linearly independent vectors to a set of orthonormal basis vectors
A function that converts a set of linearly independent vectors to a set of orthonormal basis vectors.
from mlxtend.math import vectorspace_orthonormalization
Overview
The vectorspace_orthonormalization
converts a set linearly independent vectors to a set of orthonormal basis vectors using the Gram-Schmidt process [1].
References
- [1] https://en.wikipedia.org/wiki/Gram–Schmidt_process
Example 1 - Convert a set of vector to an orthonormal basis
Note that to convert a set of linearly independent vectors into a set of orthonormal basis vectors, the vectorspace_orthonormalization
function expects the vectors to be arranged as columns of a matrix (here: NumPy array). Please keep in mind that the vectorspace_orthonormalization
function also works for non-linearly independent vector sets; however, the resulting vectorset won't be orthonormal as a result. An easy way to check whether all vectors in the input set are linearly independent is to use the numpy.linalg.det
(determinant) function.
import numpy as np
from mlxtend.math import vectorspace_orthonormalization
a = np.array([[2, 0, 4, 12],
[0, 2, 16, 4],
[4, 16, 6, 2],
[2, -12, 4, 6]])
s = ''
if np.linalg.det(a) == 0.0:
s = ' not'
print('Input vectors are%s linearly independent' % s)
vectorspace_orthonormalization(a)
Input vectors are linearly independent
array([[ 0.40824829, -0.1814885 , 0.04982278, 0.89325973],
[ 0. , 0.1088931 , 0.99349591, -0.03328918],
[ 0.81649658, 0.50816781, -0.06462163, -0.26631346],
[ 0.40824829, -0.83484711, 0.07942048, -0.36063281]])
Note that scaling the inputs equally by a factor should leave the results unchanged:
vectorspace_orthonormalization(a/2)
array([[ 0.40824829, -0.1814885 , 0.04982278, 0.89325973],
[ 0. , 0.1088931 , 0.99349591, -0.03328918],
[ 0.81649658, 0.50816781, -0.06462163, -0.26631346],
[ 0.40824829, -0.83484711, 0.07942048, -0.36063281]])
However, in case of linear dependence (the second column is a linear combination of the first column in the example below), the vector elements of one of the dependent vectors will become zero. (For a pair of linear dependent vectors, the one with the larger column index will be the one that's zero-ed.)
a[:, 1] = a[:, 0] * 2
vectorspace_orthonormalization(a)
array([[ 0.40824829, 0. , 0.04155858, 0.82364839],
[ 0. , 0. , 0.99740596, -0.06501108],
[ 0.81649658, 0. , -0.04155858, -0.52008861],
[ 0.40824829, 0. , 0.04155858, 0.21652883]])
API
vectorspace_orthonormalization(ary, eps=1e-13)
Transforms a set of column vectors to a orthonormal basis.
Given a set of orthogonal vectors, this functions converts such column vectors, arranged in a matrix, into orthonormal basis vectors.
Parameters
-
ary
: array-like, shape=[num_vectors, num_vectors]An orthogonal set of vectors (arranged as columns in a matrix)
-
eps
: float (default: 1e-13)A small tolerance value to determine whether the vector norm is zero or not.
Returns
-
arr
: array-like, shape=[num_vectors, num_vectors]An orthonormal set of vectors (arranged as columns)
Examples
For usage examples, please see https://rasbt.github.io/mlxtend/user_guide/math/vectorspace_orthonormalization/