大型稀疏矩阵的完整SVD(只需要特征值)

时间:2014-02-11 11:58:49

标签: r matlab octave svd

我正在尝试运行大型(120k x 600k)和稀疏(0.1%非空值)矩阵M的完整SVD。由于内存限制,我以前的所有尝试都失败了(使用SVDLIBC,Octave,和R)我(几乎)已经开始尝试探索我的问题的其他方法(LSA)。

然而,目前,我只对对角矩阵S的特征值感兴趣,而不是左/右奇异向量(矩阵U和V)。

有没有办法计算那些奇异值而不在存储器中存储密集矩阵M和/或奇异向量矩阵U和V?

非常感谢任何帮助。

[编辑]我的服务器配置:3,5GHz / 3,9GHz(6核/ 12线程)128GB内存

2 个答案:

答案 0 :(得分:1)

你对Fortran有多舒服?我认为您应该能够使用预先构建的here和/或here包来完成计算。此外,如果您对C ++开放并使用随机和重新正规化矩阵进行分解,您可以尝试使用名为redsvd的Google代码项目中的代码。 (我无法发布链接,因为我没有三个链接的必要声誉,但您可以搜索redsvd并轻松找到它。)

答案 1 :(得分:0)

在维基百科中查找该值的含义(来自SVD decomposition的矩阵S的元素):

  

M的非零奇异值(在Σ的对角线条目上找到)   是M * M和MM *

的非零特征值的平方根

因此,您可以在不明确构建矩阵的情况下查找矩阵A * A'(120k x 120k)的特征值。

顺便说一下,我不认为你对具有这种尺寸的矩阵的所有特征值(或奇异值)感兴趣。我认为任何算法都不会给出足够准确的结果。