SciPy

scipy.sparse.linalg.svds

scipy.sparse.linalg.svds(A, k=6, ncv=None, tol=0, which='LM', v0=None, maxiter=None, return_singular_vectors=True)[source]

Compute the largest k singular values/vectors for a sparse matrix.

Parameters:

A : {sparse matrix, LinearOperator}

Array to compute the SVD on, of shape (M, N)

k : int, optional

Number of singular values and vectors to compute.

ncv : int, optional

The number of Lanczos vectors generated ncv must be greater than k+1 and smaller than n; it is recommended that ncv > 2*k Default: min(n, 2*k + 1)

tol : float, optional

Tolerance for singular values. Zero (default) means machine precision.

which : str, [‘LM’ | ‘SM’], optional

Which k singular values to find:

  • ‘LM’ : largest singular values
  • ‘SM’ : smallest singular values

New in version 0.12.0.

v0 : ndarray, optional

Starting vector for iteration, of length min(A.shape). Should be an (approximate) right singular vector if N > M and a right singular vector otherwise. Default: random

New in version 0.12.0.

maxiter: int, optional

Maximum number of iterations.

New in version 0.12.0.

return_singular_vectors : bool, optional

Return singular vectors (True) in addition to singular values

New in version 0.12.0.

Returns:

u : ndarray, shape=(M, k)

Unitary matrix having left singular vectors as columns.

s : ndarray, shape=(k,)

The singular values.

vt : ndarray, shape=(k, N)

Unitary matrix having right singular vectors as rows.

Notes

This is a naive implementation using ARPACK as an eigensolver on A.H * A or A * A.H, depending on which one is more efficient.