犰狳中的稀疏 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'*X或X*X',然后将结果矩阵传递给eigs_sym()。另一种方法是先构造一个稀疏矩阵,如 [zeros(m,m) X; X'zeros(n,n)],其中m和n表示[=14中的行数和列数=]X.
您可能还想事先按其 1 范数缩放 X,以增加稳定性。
从 5.0 版本开始,Armadillo 具有 svds() 获取有限数量的奇异值和奇异向量的功能。
根据 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'*X或X*X',然后将结果矩阵传递给eigs_sym()。另一种方法是先构造一个稀疏矩阵,如 [zeros(m,m) X; X'zeros(n,n)],其中m和n表示[=14中的行数和列数=]X.
您可能还想事先按其 1 范数缩放 X,以增加稳定性。
从 5.0 版本开始,Armadillo 具有 svds() 获取有限数量的奇异值和奇异向量的功能。