返回A的最大特征值对应的特征向量



正如标题所说,我必须计算对应于最大特征值的特征向量v。我不确定是什么命令能做到这一点。有什么建议吗?

import numpy as np
import scipy.linalg as la
#x and y both 1D NumPy arrays of same length
def eigen_X(x,y):
    xa = np.mean(x)
    ya = np.mean(y)
    x_bar = x - xa
    y_bar = y - ya
    X = np.column_stack(x_bar,y_bar)
    A = X.transpose()@X
    #The rest of the code goes here

scipy.linalg.eig提供了一个计算2D平方矩阵的特征值和特征向量的函数。要获得与最大特征值对应的(对吗?(特征向量,请使用

w, vl, vr = la.eig(A)
largest_eigenvector = vr[:, np.argmax(w)]

如果要查找相应的左特征向量,请将上面的vr[:, np.argmax(w)]替换为vl[np.argmax(w)]

只需使用numpy的"linalg"库就可以做到这一点。eig()函数可以给出特征值和特征向量。我将numpy数组中的特征值转换为列表,以便在此处使用"索引"来查找最大特征值的位置。然后我从特征向量数组中选择相应的列。

>>> from numpy import linalg as LA
>>> M = ((1,-3,3), (3,-5,3), (6,-6,4))
>>> vals, vects = LA.eig(M)
>>> maxcol = list(vals).index(max(vals))
>>> eigenvect = vects[:,maxcol]
>>> print eigenvect
[-0.40824829+0.j -0.40824829+0.j -0.81649658+0.j]

如果您需要"主特征值";你需要找到最大特征值的位置,都是绝对值。尝试

import numpy.linalg as npla
import numpy as np
M = np.array([[0.12,6.1,-5.2], [4.6,-7.8,9.3], [3.1,2.4,8.7]])
# egv, vects = npla.eig(M) 
egv = npla.eigvals(M)
print('egv dominant of M ', egv[np.argmax(np.abs(egv))])

您可以忽略np.abs(egv(,并将agv单独用于最大特征值

使用scipy.sparse.linalg.eigs.有一种更简单的方法可以做到这一点

from scipy.sparse.linalg import eigs
val, vec = eigs(your_matrix, k=1, which='LM')

最新更新