我刚刚将我的代码从 MATLAB 移植到 Java,我需要矩阵的特征分解,具体来说我只需要前 k
个值而不是完整的分解。
但是,在 JAMA 中,特征分解类计算完整的特征分解。我试图修改它,但它抛出了一些错误。还有其他类似的库吗?
在 MATLAB 中,所讨论的函数是eigs(k,A)
所以它只是返回所有特征值的数组。您希望返回一个仅包含数组前 k 值的数组。在Java中有很多方法可以做到这一点。一种是将数组转换为 ArrayList,获取该列表的子列表,然后转换回数组。
double[] mySubArray = new double[k];
for (int i=0; i < k; i++) {
subArray[i] = myFullArray[i];
}
顺便说一下,这是他所指的图书馆:http://math.nist.gov/javanumerics/jama/doc/
如果你找不到任何现有的代码,我想你应该参考这篇论文或这篇论文。
也许你可以在 http://commons.apache.org/proper/commons-math/javadocs/api-3.6/org/apache/commons/math3/linear/EigenDecomposition.html 中尝试另一个名为 EigenDecomposition 的包,有一些方法像 getImagEigenvalue(int i)
,你可以通过这个得到i
-th 特征值。