【问题标题】:Rank r matrix approximation via SVD in Julia?在Julia中通过SVD对r矩阵近似进行排名?
【发布时间】:2022-08-14 01:29:36
【问题描述】:

假设我们已经计算了svdJulia 中的矩阵 A 通过svd(A)。我们如何计算排名r考虑到我们已经有了它的奇异值分解,在 Julia 中该矩阵 A 的近似值?

    标签: matrix julia linear-algebra numerical-methods


    【解决方案1】:

    我建议如下:

    using LinearAlgebra
    
    A=rand(10,20)
    
    svd_fact = svd(A)
    
    function r_rank_approx(svd::SVD,r::Int)
        @assert 1 ≤ r
        
        n,m = size(svd)
        u,s,v = svd
    
        r = min(r,min(n,m))
        
        u[:,1:r]*Diagonal(s[1:r])*v[:,1:r]'
    end
    
    r_rank_approx(svd_fact,2) 
    

    这个想法是只使用完整 SVD 中的第一个 r 奇异值。

    笔记:如果您有大矩阵,则有专门的算法可以直接计算截断的 SVD,请参见 TSVD.jl 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 2018-04-09
      相关资源
      最近更新 更多