2016-11-11 215 views
0

我有一個三元值矩陣(2個觀察值,11個變量),我使用Numpy的np.linalg.eig()來計算特徵向量。該矩陣是(0值不用於本示例):從最大特徵值特徵向量的使用Numpy的特徵向量值

v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 
1 1 1 1 1 1 1 1 1 -1 -1 
1 1 1 1 1 1 1 1 1 -1 -1 

結果:

[ 0.33333333 0.   0.33333333 0.   0.33333333 0.33333333 
0.33333333 0.33333333 0.33333333 0.33333333 0.33333333] 

我不知道這些係數的順序。它們是否遵循矩陣中表示的變量的順序(即,第一個0.33333333是v1的權重係數,0.0是v2的權重係數等)?

最後我的代碼部分是:

# Matrix with rounded values 
Mtx = np.matrix.round(Mtx,3) 

# Cross product of Mtx 
Mtx_CrossProduct = (Mtx.T).dot(Mtx) 

# Calculation of eigenvectors    
eigen_Value, eigen_Vector = np.linalg.eig(Mtx_CrossProduct) 
eigen_Vector = np.absolute(eigen_Vector) 

# Listing (eigenvalue, eigenvector) and sorting of eigenvalues to get PC1 
eig_pairs = [(np.absolute(eigen_Value[i]), eigen_Vector[i,:]) for i in range(len(eigen_Value))] 
eig_pairs.sort(key=lambda tup: tup[0],reverse=True) 

# Getting largest eigenvector 
eig_Vector_Main = np.zeros((11,)) 
for i in range(len(eig_pairs)): 
    eig_Vector_Main[i] = eig_pairs[i][1][0] 
+0

你舉的例子做同樣的事情更優雅和快速沒有意義,'np.linalg.eig'在方陣上工作。 – Julien

+0

我正在使用交叉產品矩陣。 – JrCaspian

回答

2

每個向量的尺寸是一樣的原始矩陣的尺寸(即,它們按照順序像你說的)。

我還沒有想通了你與你的Lambda和「標準」的Python列表做什麼,但你也許可以通過堅持numpy的即

eigen_Value, eigen_Vector = np.linalg.eig(Mtx_CrossProduct) 
eigen_Vector = np.absolute(eigen_Vector) 
ix = np.argsort(eigen_Value)[::-1] # reverse sorted index 
eig_Vector_Main = eigen_Vector[ix]