<p><code>TruncatedSVD</code> is more feature-rich. It has the <a href="http://arxiv.org/abs/1309.0238">scikit-learn API</a>, so you can put it in a <code>sklearn.Pipeline</code> object and call <code>transform</code> on a new matrix instead of having to figure out the matrix multiplications yourself. It offers two algorithms: either a fast randomized SVD solver (the default), or <code>scipy.sparse.svds</code>.</p>

<p>(Full disclosure: I wrote <code>TruncatedSVD</code>.)</p>
Difference between TruncatedSVD and svds
<p>I see that the documentation for both <a href="http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.TruncatedSVD.html" rel="noreferrer">sklearn.decomposition.TruncatedSVD</a> and <a href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.svds.html" rel="noreferrer">scipy.sparse.linalg.svds</a> mention that they both perform <code>SVD</code> for sparse matrices. What is the difference between them?</p>

<p>Thanks.</p>