I have a real symmetric matrix with a lot of degenerate eigenvalues, and I would like to find the real valued eigenvectors of this matrix. I am struggling to find a method in numpy or scipy that does this for me, the ones I have tried give complex valued eigenvectors. Does anyone know if such a function exists?
Use numpy.linalg.eigh
or scipy.linalg.eigh
. These functions are designed for symmetric (or Hermitian) matrices, and with a real symmetric matrix, they should always return real eigenvalues and eigenvectors.
For example,
In [62]: from numpy.linalg import eigh
In [63]: a
Out[63]:
array([[ 2., 1., 0., 0.],
[ 1., 2., 0., 0.],
[ 0., 0., 2., 1.],
[ 0., 0., 1., 2.]])
In [64]: vals, vecs = eigh(a)
The eigenvalues are in vals
, and the corresponding eigenvectors are in the columns of vecs
:
In [65]: vals
Out[65]: array([ 1., 1., 3., 3.])
In [66]: vecs
Out[66]:
array([[-0.70710678, 0. , 0. , 0.70710678],
[ 0.70710678, 0. , 0. , 0.70710678],
[ 0. , -0.70710678, 0.70710678, 0. ],
[ 0. , 0.70710678, 0.70710678, 0. ]])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With