3

我正在寻找一个快速的 svd 库,无论是 c、c++ 还是 java。最终我使用的是 Java,但我很喜欢使用 jna 来包装 c++,例如http://github.com/hughperkins/jeigen

我正在寻找一个可以处理稀疏矩阵的快速 svd 库。为了保持这个客观性,这样问题就不会被标记为过于主观,让我们说:

我环顾了几个图书馆,发现:

  • matlab:超级快,大约 10 秒,但它并不是真正的“库”。平均平方投影误差:0.93
  • redsvd:超快,运行1秒左右,6个特征,但平均平方投影误差为0.97,非常高
  • Eigen 的 svd 都非常慢,并且仅适用于密集矩阵
  • svdlibc:在我停止之前运行了 28 分钟;我想它是在计算完整的 S,而不仅仅是前 6 个特征左右

基本上,我正在寻找一个库,它提供与 matlab 相同的速度和平均平方投影误差,或者至少具有可比性。

4

1 回答 1

3

根据我的经验,svdlibc 是这些选项中最好的库。我之前已经对它的代码进行了一些研究,但我不相信它正在计算完整的 S 矩阵(即,它是一个真正的“薄 svd”)。如果您可以控制磁盘上的矩阵表示,则 svdlibc 在使用稀疏二进制输入格式时执行得更快,因为 I/O 开销显着降低。

S-Space 包提供了一个围绕 SVDLIBC 的 SVDLIBJ java 端口的可执行 jar 。但是,他们发现对于某些输入解决方案,它的结果与 SVDLIBC 不同。

于 2012-10-30T22:30:03.680 回答