Java Jama和matlablmnn与特征值
我把LMNN(最大边际最近邻)度量学习算法的matlab代码改为java,并使用。 我得到了不同的结果, 出现这种差异,我认为是因为Matlab和Jama中的特征值分解(特征值和特征向量)。 如果你以前遇到过这样的问题,请给我点评。 此外,在这种情况下,必须得到类似的结果 在Matlab中:Java Jama和matlablmnn与特征值,java,matlab,eigenvector,eigenvalue,jama,Java,Matlab,Eigenvector,Eigenvalue,Jama,我把LMNN(最大边际最近邻)度量学习算法的matlab代码改为java,并使用。 我得到了不同的结果, 出现这种差异,我认为是因为Matlab和Jama中的特征值分解(特征值和特征向量)。 如果你以前遇到过这样的问题,请给我点评。 此外,在这种情况下,必须得到类似的结果 在Matlab中: [V, L] = eig(M); Java(IdeM是PSD矩阵) 结果 示例结果: A = [2 4 2; 6 8 1; 5 7 5] Matlab结果: >> [V,L] = eig(
[V, L] = eig(M);
Java(IdeM是PSD矩阵)
结果
示例结果:
A = [2 4 2; 6 8 1; 5 7 5]
Matlab结果:
>> [V,L] = eig(A)
V =
-0.3486 -0.82756 0.19221
-0.57978 0.56013 -0.40315
-0.73643 0.037403 0.89472
L =
12.878 0 0
0 -0.7978 0
0 0 2.92
使用Jama库的Java:
[[0.8275575078346545, -0.3493113857121139, 0.24597790205308678],
[-0.5601335729999509, -0.5809634522691761, -0.5159207870175849],
[-0.037402561741212, -0.7379374514853343, 1.144995023469712]]
[[-0.7977988158677061,0.0, 0.0],
[0.0, 12.877769427129202, 0.0],
[0.0, 0.0,2.9200293887385067]]
由于某些原因,Jama是不正确的(列的范数不是1)。符号的重新排序和变化是正常的(您只需要得到映射到eigenval*本身的正交向量)。您可以尝试规范化列或使用jlapack。您能否具体说明使用这两种语言得到的结果有什么不同?A=[2 4 2;6 8 1;5 7 5]Matlab结果:V=-0.3486-0.8276 0.1922-0.5798 0.5601-0.4032-0.7364 0.0374 0.8947 L=12.8778 0 0-0.7978 0 0 2.9200 Java使用Jama库[[0.8275575078346545,-0.3493113857121139,0.24597790205308678],[-0.5601335729999509,-0.5809634522691761,-0.5159207870175849], [-0.037402561741212,-0.7379374514853343,1.144995023469712]] [[-0.7977988158677061,0.0, 0.0], [0.0, 12.877769427129202, 0.0], [0.0, 0.0,2.9200293887385067]]我冒昧地将这些结果合并到您的问题中,并将它们格式化为代码,以便于可读。您还可以展示一下您是如何在Java代码中初始化
ideM
值的吗?值得一提的是,我下载了JAMA 1.0.3,可以用它和Matlab R2014a重现您的精确结果。但我不知道是什么导致了这些结果。
[[0.8275575078346545, -0.3493113857121139, 0.24597790205308678],
[-0.5601335729999509, -0.5809634522691761, -0.5159207870175849],
[-0.037402561741212, -0.7379374514853343, 1.144995023469712]]
[[-0.7977988158677061,0.0, 0.0],
[0.0, 12.877769427129202, 0.0],
[0.0, 0.0,2.9200293887385067]]