我发现找的代码都太难了,所以自己编了一下
import numpy as np
A = np.array([[3,4,5,6],[3,4,5,6],[6,5,3,7]],dtype=np.float64)
def MGS( A ):
A1 = A[0]
n,m = A.shape
q0 =A[0] / np.linalg.norm(A1)
q = np.zeros((n,m))
q[0] = q0
for i in range(n-1):
for j in range(i+1, n):
A[j] = A[j] - np.inner(A[j],q[i]) * q[i]
for k in range(m):
if A[i+1][k] < 1.0e-6:
q[i+1] = A[i+1]
'''矩阵的两行相同时,第二个相同元素行会出现一个极小量。
若单位化,则会出现[0,0,0,1,0,0,0,0,0,],本步是遍历第二行的元素,若存在极小 量,则不需将此行单位化,直接输出该行,那么在结果中需要自己辨别是否存在零向量量'''
else:
q[i+1] = A[i+1] / np.linalg.norm(A[i+1])
return q
print(MGS(A))