3
如何計算python中的左側特徵向量?python中的左側特徵向量?
>>> import from numpy as np
>>> from scipy.linalg import eig
>>> np.set_printoptions(precision=4)
>>> T = np.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")
>>> print "T\n", T
T
[[ 0.2 0.4 0.4]
[ 0.8 0.2 0. ]
[ 0.8 0. 0.2]]
>>> w, vl, vr = eig(T, left=True)
>>> vl
array([[ 0.8165, 0.8165, 0. ],
[ 0.4082, -0.4082, -0.7071],
[ 0.4082, -0.4082, 0.7071]])
這似乎不正確,谷歌並沒有對此善良!
謝謝Lemming,一個問題;我被告知通過>>> s = vl [:,1]/sum(v1 [:,1])來縮放我的lsh特徵向量,其中數組([7.3543e + 15,-3.6772e + 15, -3.6772e + 15])。我如何將科學記數法轉化爲可識別的東西,爲什麼我要對其進行縮放。謝謝! Chris –
@ChrisRigano我其實不太確定,爲什麼你想要像這樣擴展特徵向量。因爲如果仔細觀察,你會發現總和幾乎爲零,因此這種縮放的結果不會很有意義。如果你打算做's = vl [:,1]/sqrt(sum(vl [:,1] ** 2))',那麼你會正常化你的特徵向量(即使它成爲長度爲1的向量)。請注意,'eig'給出的特徵向量已經被歸一化了。 – Lemming
@ChrisRigano另請注意,'numpy'已經附帶'norm'函數'numpy.linalg.norm(v1 [:,1])'返回1.0。你也可以閱讀更多關於特徵向量的縮放[這裏](http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors#Eigenspace_and_spectrum) – Lemming