[SciPy-user] Sparse eigenvalues/eigenvectors problem

James Philbin philbinj@gmail....
Thu Jun 12 09:24:52 CDT 2008


Hi,

I'm trying to find the first few (~50) eigenvectors of a largish
(2130x2130) sparse symmetric real matrix. I've used
scipy.sparse.linalg.eigen_symmetric but have hit upon a few niggles.
If I ask for 10 eigenvectors, with the following command
eigen_symmetric(S,k=10,which='LA'), I get the following eigenvalues:
[ 0.99729875  0.99770773  0.9987255   0.99883746  1.          1.
   1.        1.          1.          1.        ]

Running with k=20 gives:
[ 0.99470154  0.99567495  0.99619173  0.99729875  0.99770773  0.9987255
  0.99883746  1.          1.          1.          1.          1.          1.
  1.          1.          1.          1.          1.          1.
   1.        ]

So it seems that eigen_symmetric is failing to find lots of the
repeated 1 eigenvectors. Is this an inherent problem with ARPACK or
symptomatic of a bug in scipy? Matlab's eigs seems to not suffer from
this nearly as much, returning nearly all ones for both the 10 and 20
cases. I assume this is also using ARPACK under the surface. I can
upload the matrix S somewhere if people are interested.

I also think i've fixed a bug in the current version of arpack.py
relating to the info returned (The warning that maxiters had been
reached was never shown) and added a warning if some eigenvectors
didn't converge:

--- arpack.py.old	2008-06-12 13:28:29.000000000 +0100
+++ arpack.py	2008-06-12 15:22:55.000000000 +0100
@@ -463,8 +463,11 @@
     if  info < -1 :
         raise RuntimeError("Error info=%d in arpack"%info)
         return None
-    if info == -1:
+    if info == 1:
         warnings.warn("Maximum number of iterations taken: %s"%iparam[2])
+
+    if iparam[4]<k:
+      warnings.warn("Only %d/%d eigenvectors converged" % (iparam[4], k))

     # now extract eigenvalues and (optionally) eigenvectors
     rvec = return_eigenvectors


Thanks,
James


More information about the SciPy-user mailing list