Python eig函数特征向量的变化形式?

Python eig函数特征向量的变化形式?,python,numpy,scipy,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): exp

我试图将从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]))
import numpy.matlib
将numpy作为np导入
从scipy.linalg导入eig
#M是先前定义的NxN矩阵
评估,evecs=eig(Mnp,左=假,右=真)
def印章(expr,tol=0.0000000009):
expr.real[abs(expr.real)
这有什么问题?如何强制特征向量以正确的形式输出?谢谢大家!

import numpy.matlib
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]))
将numpy作为np导入 从scipy.linalg导入eig N=13 Mnp=np.random.random((n,n)) 评估,evecs=eig(Mnp,左=假,右=真) def印章(expr,tol=0.0000000009): expr.real[abs(expr.real)

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

您是否试图在
mm*np.matrix(evecs[:,x])
中执行矩阵乘法?如果是,则使用
np.dot(mm,evecs[:,x])
。我尝试了np.dot,但它没有消除错误(是的,我正在尝试进行矩阵乘法)。在替换为点和删除np.matrix时,我没有任何错误。你到底得到了什么错误?