Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

This is the Matlab code which is returning eigenvector in V and eigenvalue in D. Consider C is 9*9 matrix then V is 9*9 matrix and D is 9*9 diagonal. matrix.

[V,D] = eig(C);

I want the same thing in Python and in the same order as Matlab. I am using this code:

[V1, D] = np.linalg.eig(C)    
V = np.zeros((9,9))

for i in range(9):
    V[i][i] = V1[i]

(consider V to be in the for loop)

This code is giving me eigenvalue in V1 and eigenvector in D. I changed V1 to V to get a diagonal 9*9 matrix.

But the problem is that I want the eigenvalue and vector in the same order as Matlab which I am not getting in the python. Please help me in getting the values in the same order as Matlab.

See the link below for the difference in values between Matlab and python. https://drive.google.com/drive/folders/1zjhbKH0q_XXbBziZhfpL1-qS3B5oDuMb

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
162 views
Welcome To Ask or Share your Answers For Others

1 Answer

Matlab will output the eigenvalues to the diagonal elements of the D matrix in ascending order (i.e. lowest eigenvalue is D(1,1) and the largest one is D(9,9)).

Python doesn't follow this convention and the outputs (eigenvalues and eigenvectors) must be sorted with something like;

ind = np.argsort(V1);
V1 = V1[ind];
D = D[:,ind];

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...