Julia中如何实现薄QR分解 获取同维度Q矩阵与列空间正交基
Julia中获取薄QR分解对应维度Q矩阵的方法
LinearAlgebra是Julia做线性代数计算的官方标准库,其内置qr函数默认返回的分解结果中,Q字段为懒加载的正交算子,直接调用Matrix(Q)会生成行数与输入矩阵一致的完整方阵Q。要获取与输入矩阵维度匹配的薄版本Q(即原矩阵列空间的标准正交基),直接对Q字段按原矩阵列数切片即可,无需生成完整方阵。
实现示例
using LinearAlgebra # 构造测试用3×2矩阵 A = randn(3, 2) # 执行QR分解 fac = qr(A) # 取薄版本Q:维度3×2,列是A列空间的标准正交基 Q_thin = fac.Q[:, 1:size(A, 2)] # 取对应薄版本R:维度2×2 R_thin = fac.R[1:size(A, 2), :]
验证与说明
- 维度校验:
size(Q_thin)会返回(3, 2),和输入矩阵A维度一致 - 正交性校验:
Q_thin' * Q_thin ≈ I,满足标准正交基要求 - 空间一致性校验:
Q_thin * R_thin ≈ A,Q_thin的列空间完全覆盖A的列空间 - 性能提示:不要使用
Matrix(fac.Q)[:, 1:size(A,2)]的写法,该写法会先生成完整的3×3方阵Q再切片,浪费计算资源;直接对fac.Q懒算子切片时,底层只会计算需要的前2列正交基,效率更高。
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

