C++中计算矩阵秩最快的是什么way/library
What is the fastest way/library to calculate the rank of a matrix in C++
哪个库计算矩阵的秩最快?或者,是否有公开的代码可以相当快速地执行此操作?
我正在使用 Eigen3,它似乎比 Python 的 numpy rank 函数慢。我只需要这个功能快,其他绝对不重要。如果您建议打包一切,但这无关紧要,包括易用性。
我正在查看的矩阵的大小往往为 n 乘以(n 选择 3),条目为 1 或 0....大部分为 0。
谢谢。
编辑1:等级超过R.
一般来说,BLAS/LAPACK functions are frighteningly fast. This link 建议使用 GESVD
或 GESDD
函数来计算奇异值。非零奇异值的个数就是矩阵的秩。
LAPACK 是 what numpy uses。
简而言之,您可以使用相同的 LAPACK 库调用。很难超越 BLAS/LAPACK 函数,除非稀疏性和特殊结构允许更有效的方法。如果是这样,您可能需要查看实现稀疏 SVD 求解器的替代库。
请注意还有多个 BLAS/LAPACK 实现。
更新
This post 似乎认为 LU 分解对于计算排名是不可靠的。最好做SVD。在经历使用 BLAS/LAPACK 的所有麻烦之前,您可能想看看 eigen 调用有多快(我从未使用过 eigen)。
哪个库计算矩阵的秩最快?或者,是否有公开的代码可以相当快速地执行此操作?
我正在使用 Eigen3,它似乎比 Python 的 numpy rank 函数慢。我只需要这个功能快,其他绝对不重要。如果您建议打包一切,但这无关紧要,包括易用性。
我正在查看的矩阵的大小往往为 n 乘以(n 选择 3),条目为 1 或 0....大部分为 0。
谢谢。
编辑1:等级超过R.
一般来说,BLAS/LAPACK functions are frighteningly fast. This link 建议使用 GESVD
或 GESDD
函数来计算奇异值。非零奇异值的个数就是矩阵的秩。
LAPACK 是 what numpy uses。
简而言之,您可以使用相同的 LAPACK 库调用。很难超越 BLAS/LAPACK 函数,除非稀疏性和特殊结构允许更有效的方法。如果是这样,您可能需要查看实现稀疏 SVD 求解器的替代库。
请注意还有多个 BLAS/LAPACK 实现。
更新
This post 似乎认为 LU 分解对于计算排名是不可靠的。最好做SVD。在经历使用 BLAS/LAPACK 的所有麻烦之前,您可能想看看 eigen 调用有多快(我从未使用过 eigen)。