vectorspace_orthonormalization: 将一组线性无关向量转换为一组标准正交基向量
一个将一组线性无关向量转换为一组标准正交基向量的函数。
from mlxtend.math import vectorspace_orthonormalization
概述
vectorspace_orthonormalization
使用 Gram-Schmidt 过程 [1] 将一组线性无关向量转换为一组标准正交基向量。
参考资料
- [1] https://en.wikipedia.org/wiki/Gram–Schmidt_process
示例 1 - 将一组向量转换为标准正交基
请注意,为了将一组线性无关向量转换为一组标准正交基向量,vectorspace_orthonormalization
函数期望向量排列为矩阵(此处指:NumPy 数组)的列。请记住,vectorspace_orthonormalization
函数也适用于非线性无关向量集;但是,结果向量集不会是标准正交的。检查输入集中的所有向量是否线性无关的一种简单方法是使用 numpy.linalg.det
(行列式)函数。
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]])
请注意,对输入进行等比例缩放不应改变结果
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]])
但是,如果出现线性相关(例如下面的例子中,第二列是第一列的线性组合),其中一个相关向量的元素将变为零。(对于一对线性相关向量,列索引较大的那个将被置零。)
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)
将一组列向量转换为标准正交基。
给定一组正交向量,此函数将排列在矩阵中的这些列向量转换为标准正交基向量。
参数
-
ary
: 类似数组,形状=[num_vectors, num_vectors]一组正交向量(排列在矩阵的列中)
-
eps
: float (默认值: 1e-13)用于确定向量范数是否为零的小容差值。
返回值
-
arr
: 类似数组,形状=[num_vectors, num_vectors]一组标准正交向量(排列在列中)
示例
有关使用示例,请参见 https://mlxtend.cn/mlxtend/user_guide/math/vectorspace_orthonormalization/