[SciPy-User] Eigenvectors of sparse symmetric matrix

Lutz Maibaum lutz.maibaum at gmail.com
Wed Oct 27 02:19:48 EDT 2010


On Oct 26, 2010, at 9:33 AM, Pauli Virtanen wrote:
> If you have time, please test:
> 
> 	http://github.com/pv/scipy-work/tree/bug/1313-arpack

I am not sure how to use github, so I just replaced the arpack.py with the new version. The 32 bit version still works, and the 64 bit version now correctly tries to raise an exception. It seems to fail in doing so, however:

Traceback (most recent call last):
  File "check.py", line 38, in <module>
    compute_eigenvalues(a.astype(np.float64))
  File "check.py", line 22, in compute_eigenvalues
    print scipy.sparse.linalg.eigs(a)[0]
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 521, in eigs
    params.iterate()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 332, in iterate
    self._raise_no_convergence()
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 201, in _raise_no_convergence
    ev, vec = self.extract(True)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 358, in extract
    raise ArpackError(ierr, infodict=_NEUPD_ERRORS)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 121, in __init__
    RuntimeError.__init__("ARPACK error %d: %s" % (info, msg))
TypeError: descriptor '__init__' requires a 'exceptions.RuntimeError' object but received a 'str'

Again, this might be because I simply replaced the arpack.py file.

Would it be possible to add to the docstrings that maxiter=None is interpreted as maxiter=10*n (size of matrix)?

> Note that the function is there renamed from `eigen` to `eigs`, as the 
> name shadowed with the package name (plus obvious reasons).

That's good to know. A while ago there was some discussion about this (http://mail.scipy.org/pipermail/scipy-user/2010-August/026401.html). In SciPy 0.7, I used

scipy.sparse.linalg.eigen.arpack.eigen()

which no longer worked in SciPy 0.8, where I now use

scipy.sparse.linalg.eigen()

Does your change mean that for SciPy 0.9, I will have to use

scipy.sparse.linalg.eigen.arpack.eigs() ?

I help maintain a software package that is supposed to work with all 3 versions of SciPy. What would be a good way to handle this? To support 0.7 and 0.8, I am currently using something like

try:  
  import scipy.sparse.linalg.eigen.arpack as arpack  # this works for 0.7 but fails for 0.8
  scipy.sparse.linalg.eigen = arpack.eigen
except:
  import scipy.sparse.linalg.eigen         # this works for 0.8

Any suggestions would be much appreciated.

Thanks for all your help,

  Lutz




More information about the SciPy-User mailing list