I am trying to apply SVD to large sparse matrices. I already compared the performances of Propack and irlba to those of the matlab svd and svds. These two packages enhance significantly the computing time but I still have to handle the memory issue. Therefore, I am looking for a free matrix SVD algorithm which allows me to compute M largest singulars values on the fly without having to compute the entire matrix at the entry of the SVD. I read about Incremental SVD http://www.math.fsu.edu/~cbaker/IncPACK/ and also saw this topic mentioning using Lanczos with Fast Block matrix-vector multiplication via FFTs instead of the SVD SVD of large block-hankel matrix but since I am not specialist I still can not see an easy way to compute the SVD without bearing the memory cost of computing the entire matrix. Can someone help me to find out?


Incremental SVD methods will only help you if you want to calculate a truncated (preferably low-rank) SVD. The memory requirements for these algorithms are more or less the ability to store a single column of your large sparse matrix plus the current truncated SVD. If you attempt to calculate the whole SVD with an incremental method, you won't save that much memory; however, if you only calculate the left singular vectors and singular values, you could conceivably save memory if your matrix has many more columns than rows.

  • $\begingroup$ Yes I am actually trying to calculate a truncated low-rank SVD. I need this SVD to implement a PCA so I think that I only need the left singular vectors and singular values, but I am working for the moment with an approximately square matrix. Anyway I can give it a try, could you please tell me how do you think I can use the IncPack package to compute the SVD column by column ? Thanks. $\endgroup$ – user3066072 Aug 26 '15 at 1:50
  • $\begingroup$ You have to read the documentation of the package for that. $\endgroup$ – Geoff Oxberry Aug 26 '15 at 1:59
  • $\begingroup$ Why not using the randomized SVD? If M small it is very efficient. $\endgroup$ – Gil Nov 22 '15 at 7:58
  • $\begingroup$ Sure, that's also an option. $\endgroup$ – Geoff Oxberry Nov 23 '15 at 0:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.