2016-11-11 168 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]