numpy np.linalg.qr(A)或scipy.linalg.orth(A)用于寻找正交基(python)

xzabzqsa  于 2023-04-30  发布在  Python
关注(0)|答案(3)|浏览(171)

如果我有一个向量空间,由五个向量构成。..v5,以找到A的正交基,其中A=[v1,v2...v5]并且A是5Xn
我应该使用np.linalg.qr(A)还是scipy.linalg.orth(A)??
先谢谢你了

ngynwnxp

ngynwnxp1#

请注意,sp.linalg.orth使用SVD,而np.linalg.qr使用QR分解。这两种分解都是通过LAPACK函数的 Package 器获得的。
我不认为有一个强烈的偏好比其他。SVD将稍微更稳定,但计算起来也会慢一点。在实践中,我不认为你真的会看到太大的区别。

roqulrg3

roqulrg32#

您需要用途:

scipy.linalg.orth(A)

普遍接受的规则是使用scipy。linalg -因为它涵盖了比np更多的功能。linalg.希望有帮助!

ovfsdjhp

ovfsdjhp3#

numpy的QR算法的缺点是不能处理亏秩矩阵。例如:

import numpy as np
import scipy

A = np.array([[3,5,6,6], [7,2,4,4], [9,1,8,8], [7,1,6,6]])
b = np.array([1,2,3,4]).reshape(-1, 1)

#use lstsq for verification
beta, *_ = np.linalg.lstsq(A, b, rcond=None)
bproj = A @ beta
array([[1.01782846],
       [2.14262769],
       [3.7844523 ],
       [2.84115002]])

#Try numpy's qr
Q, R = np.linalg.qr(A)
bproj = Q @ Q.T @ b
array([[1.],
       [2.],
       [3.],
       [4.]])
#Q here is a 4x4 orthonormal matrix. However, Col(A) is 3 dimensional.

#With scipy's ortho
Q = scipy.linalg.orth(A)
bproj = Q @ Q.T @ b
array([[1.01782846],
       [2.14262769],
       [3.7844523 ],
       [2.84115002]])

相关问题