Python eig函数特征向量的变化形式?
我试图将从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
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时,我没有任何错误。你到底得到了什么错误?