将ℝPython正交分析 python正交化_python的一个无关组Python正交分析 python正交化_Python正交分析_02正交化为Python正交分析 python正交化_Python正交分析_03的计算公式为:
Python正交分析 python正交化_机器学习_04
将上述公式写成下列的Python函数:

import numpy as np                      #导入numpy
def orthogonalize(A):                   #计算存储在A中的向量组正交化
    _,k=A.shape                         #读取向量个数k
    B=A.copy()                          #将A拷贝为B
    for i in range(1,k):                #计算B的第1~k-1列
        for j in range(i):              #计算B[:,i]
            B[:,i]-=(np.dot(B[:,j],A[:,i])/np.dot(B[:,j],B[:,j]))*B[:,j]
    return B                            #正交化结果

程序的第2~8行定义无关向量组正交化函数orthogonalize,无关向量组以列的形式存储于参数A。第3行读取存储在A中的向量个数k。第4行将A的副本拷贝为B,作为正交化向量的初始值。第5~7行的两重for循环完成正交化向量组B的计算,外层for循环扫描B中从第2列(下标为1)开始的每一列(下标为0的第1列存储的是Python正交分析 python正交化_Python正交分析_05,不用处理),内层的for循环对B的当前列(下标为i)按公式
Python正交分析 python正交化_机器学习_06
计算Python正交分析 python正交化_机器学习_07。注意,Python用复合赋值运算符x-=a表示x=x-a。由于B在第4行拷贝为A的副本,故B[:,i]的初始值就是Python正交分析 python正交化_Python正交分析_08。而B[:,[1:i]]中存储的是在当前的Python正交分析 python正交化_机器学习_07计算前已经计算完毕的诸Python正交分析 python正交化_ci_10,注意numpy的dot函数完成向量的内积运算。循环完成,B中存储的就是正交化后的向量组。
对正交换后的向量组,可以用下列定义的函数作单位化处理。

import numpy as np                      #导入numpy
def unitization(A):                     #A中存储各列向量
    _,k=A.shape                         #读取向量个数
    for i in range(k):                  #对每一个向量
        A[:,i]/=np.linalg.norm(A[:,i])  #单位化

待单位化的向量以列的形式组织于函数unitization的参数A中。第3行读取向量个数k。第4~5行的for循环对A的每一列A[:,i](i取遍0~k-1),用自身的模(调用np.linalg的norm函数计算)除该列元素,即Python正交分析 python正交化_线性代数_11。循环结束,A中各列均完成单位化操作。
例1 用Python计算向量组Python正交分析 python正交化_ci_12Python正交分析 python正交化_python_13的正交化及单位化。

import numpy as np                              #导入numpy
np.set_printoptions(precision=4, suppress=True) #设置输出精度
A=np.array([[1,1,-1],                           #向量组矩阵
            [0,-1,1],
            [-1,0,1],
            [1,1,0]],dtype='float')
B=orthogonalize(A)                              #正交化
print(B)
unitization(B)                                  #单位化
print(B)

程序的第3~6行设置由向量作为列构成的矩阵A。第7行调用以上定义的正交化函数orthogonalize对存储在A中的列向量正交化,得保存在B中的正交化后的向量组。第8行调用上述定义的单位化函数unitization将存储在B中的两两正交向量组单位化。运行程序,输出

[[ 1.      0.3333 -0.2   ]
 [ 0.     -1.      0.6   ]
 [-1.      0.6667  0.6   ]
 [ 1.      0.3333  0.8   ]]
[[ 0.5774  0.2582 -0.169 ]
 [ 0.     -0.7746  0.5071]
 [-0.5774  0.5164  0.5071]
 [ 0.5774  0.2582  0.6761]]

前四行表示Python正交分析 python正交化_线性代数_14正交化后的结果Python正交分析 python正交化_Python正交分析_15精确到万分位的近似值。后四行表示对Python正交分析 python正交化_Python正交分析_16单位化后的结果。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!