我刚刚将我的代码从 MATLAB 移植到 Java,我需要矩阵的特征分解,特别是我只需要第一个k
值而不是完整分解。
然而在JAMA中,特征分解类计算完整的特征分解。我试图修改它,但它会引发一些错误。还有其他类似的库吗?
在 MATLAB 中,有问题的函数是eigs(k,A)
我刚刚将我的代码从 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 特征值。