【发布时间】:2015-01-14 11:43:51
【问题描述】:
根据http://arma.sourceforge.net/docs.html#part_c,犰狳支持以下功能:
eig_sym
eig_gen
eigs_sym
eigs_gen
svd
svd_econ
但似乎没有像“svds_econ”这样的函数,它对“稀疏”矩阵进行操作并返回奇异值和向量。
有没有办法在犰狳中实现这个功能?
【问题讨论】:
标签: 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”这样的函数,它对“稀疏”矩阵进行操作并返回奇异值和向量。
有没有办法在犰狳中实现这个功能?
【问题讨论】:
标签: c++ armadillo svd eigenvalue
从 5.0 版开始,Armadillo 具有 svds() 函数,用于获取有限数量的奇异值和奇异向量。
【讨论】:
可以间接计算稀疏 SVD。例如,首先计算 X'*X 或 X*X',然后将结果矩阵传递给 eigs_sym()。另一种方法是首先构造一个稀疏矩阵,如 [zeros(m,m) X; X' zeros(n,n)],其中m和n表示X中的行数和列数。
您可能还希望事先将 X 缩放为 1 范数,以提高稳定性。
【讨论】:
type svds.m 来完成。本质上,svds() 从 eigs() 获取输出并操作存储在 V 中的特征向量,如下所示:u = root2 * V(1:m,ind); ... v = root2 * V(m+1:end,ind);