[Numpy-discussion] linalg.eigh orders eigenvalues/eigenvectors differently than linalg.eig
Zachary Pincus
zpincus at stanford.edu
Mon Feb 19 05:56:34 EST 2007
Hello all,
It seems that the 'eigh' routine from numpy.linalg does not follow
the same convention as numpy.linalg.eig in terms of the order of the
returned eigenvalues. (And thus eigenvectors as well...)
Specifically, eig returns eigenvalues in order from largest to
smallest, while eigh returns them from smallest to largest.
Example:
>>> a = numpy.array([[21, 28, 35],[28, 38, 48],[35, 48, 61]])
>>> numpy.linalg.eigh(a)
(array([ -1.02825542e-14, 7.04131679e-01, 1.19295868e+02]),
array([[ 0.40824829, -0.81314396, -0.41488581],
[-0.81649658, -0.12200588, -0.56431188],
[ 0.40824829, 0.56913221, -0.71373795]]))
>>> numpy.linalg.eig(a)
(array([ 1.19295868e+02, 7.04131679e-01, 4.62814557e-15]),
array([[-0.41488581, -0.81314396, 0.40824829],
[-0.56431188, -0.12200588, -0.81649658],
[-0.71373795, 0.56913221, 0.40824829]]))
Is this a bug? If it is, though, fixing it now might break code that
depends on this 'wrong' order. (This is also present in
scipy.linalg.) If not a bug, or not-fixable-now, then at least some
documentation as to the convention regarding ordering of eigenvalues
is probably worthwhile...
Any thoughts?
Zach
More information about the NumPy-Discussion
mailing list