犰狳中的稀疏 svd (C++)

Sparse svd in Armadillo (C++)

根据 http://arma.sourceforge.net/docs.html#part_c ,Armadillo 支持以下功能:

eig_sym
eig_gen
eigs_sym
eigs_gen
svd
svd_econ

但是好像没有像"svds_econ"这样的函数,它对"sparse"矩阵和returns奇异值和向量进行运算。

有没有办法在 Armadillo 中实现此功能?

可以间接计算稀疏 SVD。例如,首先计算X'*XX*X',然后将结果矩阵传递给eigs_sym()。另一种方法是先构造一个稀疏矩阵,如 [zeros(m,m) X; X'zeros(n,n)],其中mn表示[=14中的行数和列数=]X.

您可能还想事先按其 1 范数缩放 X,以增加稳定性。

从 5.0 版本开始,Armadillo 具有 svds() 获取有限数量的奇异值和奇异向量的功能。