For model reduction, I want to compute the left singular vectors associated to the - say 20 - largest singular values of a matrix $A \in \mathbb R^{N,k}$, where $N\approx 10^6$ and $k\approx 10^3$. Unfortunately, my matrix $A$ will be dense without any structure.If I just call the svd routine from the numpy.linalg module in Python for a random matrix of this size, I run into a memory error. This is due to the allocation of $V\in \mathbb R^{N,N}$ for the decomposition $A = VSU$.Are there algorithms around, that avoid this pitfall? E.g. by setting up only the singular vectors assiociated with nonzero singular values.I am ready to trade in computation time and accuracy.
Memory efficient implementations of partial Singular Value Decompositions (SVD)
linear algebra;python;reference request;numpy;svd
If you only want a few singular values/vectors, ARPACK should do the trick.  The SVD docs aren't great, and this distribution is more up to date.EDIT: If you want to do this in python, SciPy has a wrapper.  Since your matrix is dense, you could try the block sparse row (BSR) format.