sparsesvd {sparsesvd} | R 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 |
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 |
exclude singular values whose magnitude is smaller than |
kappa |
accuracy parameter |
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 |
u |
a column matrix of the first |
v |
a column matrix of the first |
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
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