2016-11-11 19 views
0

私はNumpyのnp.linalg.eig()を使って固有ベクトルを計算する3値(2つの観測値、11変数)の行列を持っています。行列は、(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

あなたの一例をnumpyのために貼り付けることで、よりエレガントかつ迅速に同じことを行うことができます意味がありません、 'np.linalg.eig'は正方行列に作用します。 – Julien

+0

私はクロス積マトリックスを使用しています。 – JrCaspian

答えて

2

各ベクトルの大きさは、元の行列の次元と同じである(すなわち、あなたが言うように、彼らは順番に従ってください)。

私はあなたがあなたのラムダと「標準」のpythonのリストをやっている正確に何を考え出していませんでしたが、あなたはおそらく、すなわち

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] 
関連する問題