【问题标题】:Eigenvector values using Numpy使用 Numpy 的特征向量值
【发布时间】:2016-11-11 18:28:54
【问题描述】:

我有一个三元值矩阵(2 个观察值,11 个变量),我使用 Numpy 的 np.linalg.eig() 计算特征向量。矩阵为(本例不使用0值):

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]

【问题讨论】:

  • 你的例子没有意义,np.linalg.eig 适用于方阵。
  • 我正在使用叉积矩阵。

标签: python numpy eigenvector


【解决方案1】:

每个向量的维度与原始矩阵的维度相同(即它们按照您说的顺序排列)。

我还没有弄清楚你在用你的 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]

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多