Search code examples
scipyeigenvector

Get non normalized eigenvectors in scipy


Scipy and Numpy returns eigenvectors normalized. I am trying to use the vectors for a physical application and I need them to not be normalized.

For example a = np.matrix('-3, 2; -1, 0') W,V = spl.eig(a)

scipy returns eigenvalues (W) of [-2,-1] and the modal matrix (V) (eigenvalues as columns) [[ 0.89442719 0.70710678][ 0.4472136 0.70710678]]

I need the original modal matrix [[2 1][1 1]]


Solution

  • According to various related threads (1) (2) (3), there is no such thing as a "non normalized" eigenvector.

    Indeed, an eigenvector v corresponding to the eigenvalue l of the matrix A is defined by,

    A*v = l*v
    

    and can therefore be multiplied by any scalar and remain valid.

    While depending on the algorithm, the computed eigenvector can have a norm different from 1, this does not hold any particular meaning (physical or otherwise), and should not be relied on. It is customary to return a normalized eigenvector in most numerical libraries (scipy, R, matlab, etc).