快速准确的稀疏svd库?

时间:2012-10-08 06:32:00

标签: java c++ c matrix svd

我正在寻找一个快速的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大致相同的速度和平均投影误差的库,或者至少有一点可比性。

1 个答案:

答案 0 :(得分:2)

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

S-Space包在SVDLIBC的SVDLIBJ java端口周围提供executable jar。但是,对于某些输入解决方案,他们发现它与SVDLIBC的结果不同。