正如标题所述,我必须计算与最大特征值相对应的特征向量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
答案 0 :(得分:1)
scipy.linalg.eig提供了一个计算2D方阵的特征值和特征向量的函数。要获得对应于最大特征值的(正确?)特征向量,请使用
w, vl, vr = la.eig(A)
largest_eigenvector = vr[:, np.argmax(w)]
如果要查找对应的左特征向量,请用vr[:, np.argmax(w)]
替换上方的vl[np.argmax(w)]
。
答案 1 :(得分:0)
仅使用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]