sparsesvd: Singular Value Decomposition of a Sparse Matrix.

sparsesvdR Documentation

Singular Value Decomposition of a Sparse Matrix.

Description

Compute the (usually truncated) singular value decomposition (SVD) of a sparse real matrix. This function is a shallow wrapper around the SVDLIBC implementation of Berry's (1992) single Lanczos algorithm.

Usage

  sparsesvd(M, rank=0L, tol=1e-15, kappa=1e-6)

Arguments

M

a sparse real matrix in Matrix package format. The preferred format is a dgCMatrix and other storage formats will automatically be converted if possible.

rank

an integer specifying the desired number of singular components, i.e. the rank of the truncated SVD. Specify 0 to return all singular values of magnitude larger than tol (default).

tol

exclude singular values whose magnitude is smaller than tol

kappa

accuracy parameter κ of the SVD algorithm (with SVDLIBC default)

Value

The truncated SVD decomposition

M_r = U_r D V_r^T

where M_r is the optimal rank r approximation of M. Note that r may be smaller than the requested number rank of singular components.

The returned value is a list with components

d

a vector containing the first r singular values of M

u

a column matrix of the first r left singular vectors of M

v

a column matrix of the first r right singular vectors of M

References

The SVDLIBC homepage http://tedlab.mit.edu/~dr/SVDLIBC/ seems to be no longer available. A copy of the source code can be obtained from https://github.com/lucasmaystre/svdlibc.

Berry, Michael~W. (1992). Large scale sparse singular value computations. International Journal of Supercomputer Applications, 6, 13–49.

See Also

svd, sparseMatrix

Examples

M <- rbind(
  c(20, 10, 15,  0,  2),
  c(10,  5,  8,  1,  0),
  c( 0,  1,  2,  6,  3),
  c( 1,  0,  0, 10,  5))
M <- Matrix::Matrix(M, sparse=TRUE)
print(M)

res <- sparsesvd(M, rank=2L) # compute first 2 singular components
print(res, digits=3)

M2 <- res$u %*% diag(res$d) %*% t(res$v) # rank-2 approximation
print(M2, digits=1)

print(as.matrix(M) - M2, digits=2) # approximation error

sparsesvd documentation built on Jan. 15, 2023, 1:06 a.m.