我目前正在使用改进的Gram-Schmidt算法来计算矩阵A(m x n)的QR分解。我目前的问题是我需要完整的分解Q(m x m)而不是薄的Q(m x n)。有人可以帮助我,我必须向算法添加什么才能计算完整的 QR 分解?
import numpy as np
def gs_m(A):
m,n= A.shape
A= A.copy()
Q= np.zeros((m,n))
R= np.zeros((n,n))
for k in range(n):
R[k,k]= np.linalg.norm(A[:,k:k+1].reshape(-1),2)
Q[:,k:k+1]= A[:,k:k+1]/R[k,k]
R[k:k+1,k+1:n+1]= np.dot( Q[:,k:k+1].T, A[:,k+1:n+1] )
A[:,k+1:n+1]= A[:, k+1:n+1] - np.dot( Q[:,k:k+1], R[k:k+1,k+1:n+1])
return Q, R
也许你应该使用 scipy.linalg.qr,它确实有完整和精简版本(模式参数)