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/