GDSVD is a package for computing SVD via gradient descent.
Example usage:
-
Install via pip install gdsvd
-
Import:
from gdsvd.svd import gd_svd
-
Memmap input data, recommended for large datasets
U_true = np.memmap("datasets/ranklogn-exp-500_U.bin", dtype=np.float64, mode='r', shape=(500, 6))
S_true = np.memmap("datasets/ranklogn-exp-500_S.bin", dtype=np.float64, mode='r', shape=(6,))
Vt_true = np.memmap("datasets/ranklogn-exp-500_Vt.bin", dtype=np.float64, mode='r', shape=(6, 500))
M = np.memmap("datasets/ranklogn-exp-500_M.bin", dtype=np.float64, mode='r', shape=(500, 500))
-
Ensure that the arrays are contiguous
U_true = np.ascontiguousarray(U_true)
S_true = np.ascontiguousarray(S_true)
Vt_true = np.ascontiguousarray(Vt_true)
M = np.ascontiguousarray(M)
-
To run the method normally:
U,S,Vt = gd_svd(M)
-
To run the method with convergence tracking written to conv_out.txt:
U,S,Vt = gd_svd(M, record_conv = 'conv_out.txt', U_true = U_true, S_true = S_true, Vt_true = Vt_true)
gdsvd
is implemented as Algorithm 4 in the reference paper.
Included in the package are gdsvd3
(Algorithm 3) and power-method
(Algorithm 5), which is the GD method with alternate stopping and the power method, respectively.
Reference:
k-SVD via gradient descent