Jama和Matlab LMNN和特征值

时间:2014-03-26 20:20:10

标签: java matlab eigenvector eigenvalue jama

我将LMNN(最大边距最近邻)度量学习算法matlab代码更改为java,并使用Jama library。 我得到了不同的结果, 由于Matlab和Jama中的eigenValue分解(特征值和特征向量),我认为存在差异。 如果你以前遇到过这样的问题,请你评论我。 另外,在这种情况下是否必须得到类似的结果。

在Matlab中:

[V, L] = eig(M);

Java(IdeM是PSD矩阵)

Matrix V = ideM.eig().getV();
Matrix L = ideM.eig().getD();

结果

示例结果:

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 Library的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]]

1 个答案:

答案 0 :(得分:0)

嗯,由于某些原因,贾马是不正确的(列不具有1的标准)。符号的重新排序和改变是正常的(你只是得到映射到特征值*自身的正交向量)。您可以尝试规范化列或使用jlapack。