Armadillo中的稀疏svd(C ++)

时间:2015-01-14 11:43:52

标签: c++ armadillo svd eigenvalue

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

eig_sym
eig_gen
eigs_sym
eigs_gen
svd
svd_econ

但是似乎没有像" svds_econ"这样的功能,它在"稀疏"矩阵并返回奇异值和向量。

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

您可能还希望事先按照1-norm缩放 X ,以提高稳定性。