I need to calculate a low rank SVD of a large matrix for a pseudoinverse, but I also need the individual matrices. I currently do I like this:
X_svd = svd(X) r = 20 U = X_svd.U[:, 1:r] Σ = Diagonal(X_svd.S[1:r]) Vt = X_svd.Vt[1:r, :]
svd does not have a parameter to produce the low rank approximations, interestingly
pinv has an option for that (
Am I right that this is a limitation of LAPACK and not julia calling it? I don’t know much about the algorithmic side of this, how large are the potential gains (computation and memory) when only calculating a lower rank?
I found LowRankApprox.jl but I have yet to try it.