Julia中将SVD计算得到的Sigma值组装为对角矩阵的方法
Julia SVD结果快速生成Sigma对角矩阵的方法
在Julia中调用LinearAlgebra标准库的svd函数做奇异值分解时,返回的结果对象已经提前把所有奇异值按降序整理成了一维向量,完全不需要手动逐一键入奇异值,根据你需要的Sigma矩阵规格,直接用下面两种方法即可:
生成和奇异值数量匹配的方阵Sigma
svd返回的结果结构体的S字段,就是存储全部奇异值的一维向量,而Diagonal构造函数原生支持直接传入一维向量作为对角线元素,不需要手动拆分向量逐值传参,直接把这个字段传入就行,代码示例:using LinearAlgebra # 以4行3列的随机测试矩阵为例 A = rand(4, 3) svd_res = svd(A) # 直接生成3×3的对角方阵Sigma,对角线元素就是排序好的奇异值 Sigma_square = Diagonal(svd_res.S)这个写法对任意维度的输入矩阵都生效,不需要关心奇异值的具体个数。
生成和原矩阵A同维度的m×n规格Sigma
如果你需要的是可以直接和U、Vt相乘还原原矩阵的非方阵对角Sigma(和A的行数列数完全一致),可以调用diagm函数,传入原矩阵的行列数和奇异值向量即可,不需要手动填充非对角位置的0元素:m, n = size(A) # 生成4行3列的Sigma矩阵,对角线为奇异值,其余位置为0 Sigma_full = diagm(m, n, svd_res.S)可以直接做乘法验证还原效果:
svd_res.U * Sigma_full * svd_res.Vt ≈ A会返回true,误差在浮点计算允许范围内。
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

