私はnumpyを使って行列の固有ベクトルを計算していました。私はいくつかの奇妙な結果を得ていました。それから私はMatlabを使うことにしました。私はU.dot(U.T) = I
を期待していたので、Numpyが間違ったeigeinvectorsを計算する
L = np.array(([2,-1,-1],[-1,2,-1],[-1,-1,2]))
Lam,U = np.linalg.eig(L) #compute eigenvalues and vectors
#sort by ascending eigenvalues
I = [i[0] for i in sorted(zip(xrange(len(Lam)),Lam),key=lambda x: x[1])]
Lam = Lam[I]
U = U[:,I]
print U.dot(U.T)
>> [[ 1.09 -0.24 0.15]
[-0.24 1.15 0.09]
[ 0.15 0.09 0.76]]
結果が変でした。 MATLABで:何が起こっている
0.5774 0.7634 0.2895
0.5774 -0.6325 0.5164
0.5774 -0.1310 -0.8059
:
[[-0.58 0.82 0.29]
[-0.58 -0.41 -0.81]
[-0.58 -0.41 0.51]]
およびV:ところでUによって
L = [2,-1,-1;-1,2,-1;-1,-1,2]
[V,D] = eig(L)
V*V'
ans =
1.0000 0.0000 -0.0000
0.0000 1.0000 0.0000
0.0000 0.0000 1.0000
?
確かまだ、何が起こっているが、ちょうど2つのヒントはありません基本的に 'np.argsort(Lam)'と 'zip(xrange(lam(Lam))、key = lambda(Lam) 、Lam) 'は'列挙(Lam) 'されています。 – swenzel