在C ++中计算矩阵等级的最快方法/库是什么?

时间:2015-12-03 03:44:45

标签: c++ windows linear-algebra sparse-matrix

什么库以最快的速度计算矩阵的等级?或者,是否有公开的代码可以相当快地完成?

我正在使用Eigen3,它似乎比Python的numpy rank函数慢。我只需要这个功能快速,绝对没有其他问题。如果你建议包装,但这是无关紧要的,包括易用性。

我所看到的矩阵的大小往往是n乘(n选3),条目是1或0 ....大多数是0' s。

感谢。

编辑1 :排名超过R。

1 个答案:

答案 0 :(得分:1)

一般来说,BLAS/LAPACK功能非常快。 This link建议使用GESVDGESDD函数来计算奇异值。非零奇异值的数量将是矩阵的等级。

LAPACK是what numpy uses

简而言之,您可以使用相同的LAPACK库调用。除非稀疏性和特殊结构允许更有效的方法,否则将难以超越BLAS / LAPACK功能。如果这是真的,您可能想要检查实现稀疏SVD求解器的替代库。

另请注意,有多个BLAS / LAPACK实现。

更新

This post似乎认为LU分解对于计算等级是不可靠的。最好做SVD。在经历使用BLAS / LAPACK(我从未使用过本征)的所有麻烦之前,你可能想看看特征调用的速度有多快。