torch.svd_lowrank¶
- torch.svd_lowrank(A, q=6, niter=2, M=None)[source]¶
Return the singular value decomposition
(U, S, V)
of a matrix, batches of matrices, or a sparse matrix such that . In case is given, then SVD is computed for the matrix .Note
The implementation is based on the Algorithm 5.1 from Halko et al., 2009.
Note
For an adequate approximation of a k-rank matrix , where k is not known in advance but could be estimated, the number of columns, q, can be choosen according to the following criteria: in general, . For large low-rank matrices, take . If k is relatively small compared to , choosing may be sufficient.
Note
This is a randomized method. To obtain repeatable results, set the seed for the pseudorandom number generator
Note
In general, use the full-rank SVD implementation
torch.linalg.svd()
for dense matrices due to its 10x higher performance characteristics. The low-rank SVD will be useful for huge sparse matrices thattorch.linalg.svd()
cannot handle.- Args::
A (Tensor): the input tensor of size
q (int, optional): a slightly overestimated rank of A.
- niter (int, optional): the number of subspace iterations to
conduct; niter must be a nonnegative integer, and defaults to 2
- M (Tensor, optional): the input tensor’s mean of size
, which will be broadcasted to the size of A in this function.
- References::
Nathan Halko, Per-Gunnar Martinsson, and Joel Tropp, Finding structure with randomness: probabilistic algorithms for constructing approximate matrix decompositions, arXiv:0909.4061 [math.NA; math.PR], 2009 (available at arXiv).