On 4/28/07, Anton Sherwood <bronto@pobox.com> wrote:
Travis Oliphant wrote:
> One approach is to use argsort to create an index list of sorted
> eigenvalues and then sort the eig and eigvector arrays before zipping
> them together in a list of tuples.
> eig, val = numpy.linalg.eig(a)
> indx = eig.argsort()
> eig = eig.take(indx)
> val = val.take(indx, axis=1)
> master = zip(eig, val.T)

Thank you, that worked.

I refined it slightly:

val,vec = numpy.linalg.eig(adj)
indx = val.argsort()[-4:-1]
val = val.take(indx)
vec = vec.take(indx, axis=1)
master = zip(val, vec.T)

But that won't get the 4  largest, and will ignore the last eigenvalue, whatever it is. If you want the four largest, do

val,vec =  numpy.linalg.eig(adj)
ind = val.argsort()
val = val.take(ind[-4:])
vec = vec.take(ind[-4:], axis=1)
master = zip(val, vec.T)