这是Matlab代码,它返回V中的特征向量和D中的特征值。假设C是9*9矩阵,那么V是9*9矩阵,D是9*9对角线。矩阵。
[V,D] = eig(C);
我想要在Python中做同样的事情,并且顺序与Matlab相同。我使用的是以下代码:
[V1, D] = np.linalg.eig(C)
V = np.zeros((9,9))
for i in range(9):
V[i][i] = V1[i]
(假设V在for循环中)
这段代码给出了V1中的特征值和D中的特征向量。我将V1改为V,得到了一个对角的9*9矩阵。
但问题是,我希望特征值和向量的顺序与Matlab相同,这在python中是得不到的。请帮助我以与Matlab相同的顺序获取这些值。
参见下面的链接,了解Matlab和python之间的值差异。https://drive.google.com/drive/folders/1zjhbKH0q_XXbBziZhfpL1-qS3B5oDuMb
发布于 2018-07-23 04:03:23
Matlab将特征值按升序输出到D矩阵的对角元素(即最小特征值为D(1,1),最大特征值为D(9,9))。
Python不遵循这种约定,输出(特征值和特征向量)必须按如下方式排序;
ind = np.argsort(V1);
V1 = V1[ind];
D = D[:,ind];
https://stackoverflow.com/questions/51467026
复制相似问题