奇异值分解实现
我有一个用C实现的SVD库。但是我想在Java程序中调用它的函数。 有一个简单的方法吗? 或者有人请建议使用Java进行SVD实现的链接。
Colt是另一个带有矩阵和SVD的Java数学库。
还有Apache公共数学库: http : //commons.apache.org/math/
它有矩阵和SVD算法。 还有很多其他有用的东西!
如果它是直的C,你可以看看JNA ,这将允许你相对容易地从java调用C.
还有JNI和/或SWIG ,但他们更多参与。
您可以使用Java Native Interface (JNI)从java程序中调用本机代码。 设置起来并不困难。
Adrian Kuhn和David Erni最近发布了SVDLIBJ ,它是SVDLIBC的纯Java端口。 如果你想做一个薄的SVD(你只需要一些最奇异的值或向量),这可能是最好的选择。 JAMA,COLT和Apache Commons Math软件包都可以执行完整的SVD。
如果您想将SVD用作独立程序,S-Space软件包还有一个命令行工具,可以像SVDLIBC一样使用SVDLIBJ,同时支持更多矩阵格式。
当我不得不在Java中进行矩阵操作时,我使用了JAMA:Java Matrix Package
我知道它有SVD,但我无法保证包装的效率或当前状态。
另请参阅Apache Mahout的实现 – https://cwiki.apache.org/confluence/display/MAHOUT/Dimensional+Reduction