从eig函数更改特征向量的形式?

时间:2018-08-01 15:25:26

标签: python numpy scipy

我试图将我从eig函数获得的特征向量乘以我的原始矩阵,但这给了我一个“矩阵未对齐”的错误。这是我要运行的代码:

import numpy.matlib 
import numpy as np 
from scipy.linalg import eig
#M is a previously defined NxN matrix

evals, evecs = eig(Mnp, left=False,right=True)

def chop(expr, tol=0.0000000009):
  expr.real[abs(expr.real) < tol] = 0.0
  expr.imag[abs(expr.imag) < tol] = 0.0
  return expr
evecs = chop(evecs)

lamda=evals[1]
mM=np.matrix(M)
mm=np.matrix(mM-lamda*np.identity(N))

for x in np.where(evals==lamda)[0]:
  print(mm*np.matrix(evecs[:,x]))

这有什么问题?如何强制特征向量以正确的形式输出?谢谢!

1 个答案:

答案 0 :(得分:0)

import numpy.matlib 
import numpy as np 
from scipy.linalg import eig

N = 13
Mnp = np.random.random((n,n))

evals, evecs = eig(Mnp, left=False,right=True)

def chop(expr, tol=0.0000000009):
    expr.real[abs(expr.real) < tol] = 0.0
    expr.imag[abs(expr.imag) < tol] = 0.0
    return expr
evecs = chop(evecs)

lamda=evals[1]
mM=np.matrix(M)
mm=np.matrix(mM-lamda*np.identity(N))

for x in np.where(evals==lamda)[0]:
    print(np.matmul(mm,evecs[:,x]))

这就是我想做的。您只需要使用np.matmul(A,b),其中A.shape [1] == b.shape [0]返回True。您也可以使用np.dot(A,b)。