我想在一个大的稀疏矩阵(17k x 2m)上运行R中的svd()
,并且我可以访问集群。是否有一个直接的方法来计算SVD在R使用多核?
RScaLAPACK包(http://www.inside-r.org/packages/cran/RScaLAPACK)似乎使这成为可能,但它似乎不再被积极支持(http://cran.r-project.org/web/packages/RScaLAPACK/),我想这是有原因的。
rARPACK是您需要的包。工作就像一个魅力(即使矩阵比你的规格大得多)。超快,因为它通过C和c++并行化。
rARPACK
是一种选择,但请确保您有一个优化的多核BLAS库,因为所有并行计算部分都不在rARPACK
本身中,而是在BLAS中。
rARPACK
只计算PARTIAL SVD,这意味着它只计算最大的k
奇异值和相关的奇异向量。如果您确实需要完整的SVD,您仍然可以使用svd()
。
您也可以考虑bigstatsr::bigSVD()。我已经测试过了,当我在处理大型甲基化数据集时,它往往比我的GPU快。它不是并行的,但我发现它的性能确实非常出色。