Skip to content

Instantly share code, notes, and snippets.

@ExpHP
Created June 15, 2018 20:31
Show Gist options
  • Select an option

  • Save ExpHP/3faeedfaa3b75236eb8036f48dbc2d56 to your computer and use it in GitHub Desktop.

Select an option

Save ExpHP/3faeedfaa3b75236eb8036f48dbc2d56 to your computer and use it in GitHub Desktop.
shift invert bad results
$ python3
Python 3.6.5 (default, May 11 2018, 04:00:52)
[GCC 8.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> d=json.load(open('gamma-dynmat.json'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'gamma-dynmat.json'
>>> d=json.load(open('whyyyyyyy-091-a/gamma-dynmat.json'))
>>> list(d)
['dim', 'complex-blocks', 'col', 'row-ptr']
>>> np.array(d['complex-blocks'].shape)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'shape'
>>> np.array(d['complex-blocks']).shape
(73164, 2, 3, 3)
>>> np.array(d['complex-blocks'])[:,0]
array([[[ 5.69604874e+00, -7.39489409e-17, 6.56296758e-16],
[-7.39489409e-17, 5.69604874e+00, 1.47897861e-16],
[ 6.56296758e-16, 1.47897861e-16, 1.22197388e+00]],
[[-1.24077979e-01, -7.19405585e-02, 7.43219379e-04],
[ 1.98967136e-01, -6.72204767e-02, 4.66179154e-04],
[-6.14371767e-04, 8.43503480e-04, 8.52878657e-02]],
[[-1.36438974e-01, -1.91830512e-01, 3.21133001e-05],
[ 7.90771824e-02, -5.48594815e-02, -8.76736440e-04],
[ 1.03768133e-03, 1.10309818e-04, 8.52878657e-02]],
...,
[[-2.64307305e-02, -1.28317223e-01, -4.23309558e-04],
[ 1.42590471e-01, -1.64867725e-01, 9.53813297e-04],
[-7.75332679e-04, -4.10557286e-04, 8.52878657e-02]],
[[-1.35262114e-01, -7.87987349e-02, 7.89456533e-04],
[ 1.86885598e-01, -5.68633855e-02, 1.58756604e-03],
[-2.02130834e-03, 1.74118001e-03, 8.50622129e-02]],
[[ 5.71467463e+00, -1.78455127e-02, 8.48146847e-03],
[-1.78455127e-02, 5.72758720e+00, -1.04347145e-02],
[ 8.48146847e-03, -1.04347145e-02, 1.21963394e+00]]])
>>> np.array(d['complex-blocks'])[:,1]
array([[[ 0., 0., -0.],
[-0., 0., -0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
...,
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]])
>>> np.array(d['complex-blocks'])[:,0]
array([[[ 5.69604874e+00, -7.39489409e-17, 6.56296758e-16],
[-7.39489409e-17, 5.69604874e+00, 1.47897861e-16],
[ 6.56296758e-16, 1.47897861e-16, 1.22197388e+00]],
[[-1.24077979e-01, -7.19405585e-02, 7.43219379e-04],
[ 1.98967136e-01, -6.72204767e-02, 4.66179154e-04],
[-6.14371767e-04, 8.43503480e-04, 8.52878657e-02]],
[[-1.36438974e-01, -1.91830512e-01, 3.21133001e-05],
[ 7.90771824e-02, -5.48594815e-02, -8.76736440e-04],
[ 1.03768133e-03, 1.10309818e-04, 8.52878657e-02]],
...,
[[-2.64307305e-02, -1.28317223e-01, -4.23309558e-04],
[ 1.42590471e-01, -1.64867725e-01, 9.53813297e-04],
[-7.75332679e-04, -4.10557286e-04, 8.52878657e-02]],
[[-1.35262114e-01, -7.87987349e-02, 7.89456533e-04],
[ 1.86885598e-01, -5.68633855e-02, 1.58756604e-03],
[-2.02130834e-03, 1.74118001e-03, 8.50622129e-02]],
[[ 5.71467463e+00, -1.78455127e-02, 8.48146847e-03],
[-1.78455127e-02, 5.72758720e+00, -1.04347145e-02],
[ 8.48146847e-03, -1.04347145e-02, 1.21963394e+00]]])
>>> from scipy.sparse import bsr_matrix
>>> bsr_matrix((np.array(d['complex-blocks'])[:,0], d['col'], d['row-ptr'])
...
KeyboardInterrupt
>>> m=bsr_matrix((np.array(d['complex-blocks'])[:,0], d['col'], d['row-ptr']), d['dim'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/bsr.py", line 213, in __init__
self.check_format(full_check=False)
File "/home/lampam/asd/clone/scipy/scipy/sparse/bsr.py", line 249, in check_format
(len(self.indptr), M//R + 1))
ValueError: index pointer size (365) should be (122)
>>> d['dim']
[364, 364]
>>> max(d['row-ptr'])
73164
>>> max(d['col'])
363
>>> m=bsr_matrix((np.array(d['complex-blocks'])[:,0], d['col'], d['row-ptr']), tuple(3*x for x in d['dim']))
>>> m
<1092x1092 sparse matrix of type '<class 'numpy.float64'>'
with 658476 stored elements (blocksize = 3x3) in Block Sparse Row format>
>>> import scipy.sparse.linalg as spla
>>> spla.eigsh(m, k=4, sigma=0, which='LA')
/home/lampam/asd/clone/scipy/scipy/sparse/linalg/dsolve/linsolve.py:295: SparseEfficiencyWarning: splu requires CSC matrix format
warn('splu requires CSC matrix format', SparseEfficiencyWarning)
2 iterations
(array([3.10594774e-06, 3.10599138e-06, 1.51204583e-04, 2.19732931e-03]), array([[ 4.61343009e-02, -2.15809055e-02, -2.35679865e-02,
-1.13120587e-04],
[ 2.15800151e-02, 4.61470767e-02, -1.64663663e-03,
-7.92368811e-06],
[ 2.76583549e-05, -7.59958518e-09, 5.09959618e-02,
-6.41123842e-02],
...,
[-4.65772367e-02, 2.25835198e-02, 1.97544783e-02,
1.02979021e-04],
[-2.18463087e-02, -4.52288143e-02, 4.38217677e-02,
1.35183692e-04],
[-2.17377649e-03, 7.09817990e-04, 2.80205556e-02,
-5.73705949e-02]]))
>>> spla.eigsh(m, k=4, sigma=0, which='SA')
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 537, in iterate
self.ipntr, self.workd, self.workl, self.info)
KeyboardInterrupt
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25 which='SA')
File "<stdin>", line 1
(evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25 which='SA')
^
SyntaxError: invalid syntax
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 3/4 eigenvectors converged)
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
1 iterations
>>> evals
array([-1.41933476e-04, -7.42441034e-10, -7.42440603e-10, -2.56385420e-15])
>>> 15.6333043006705 * 33.3564095198152 * abs(-1.41933476e-04) ** 0.5
6.212587206416409
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 3/4 eigenvectors converged)
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 3/4 eigenvectors converged)
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
1 iterations
>>> evals
array([-3.37356231e-04, -7.42441038e-10, -7.42440584e-10, -2.56385420e-15])
>>> 15.6333043006705 * 33.3564095198152 * abs(-3.37356231e-04) ** 0.5
9.577991483650955
>>> m @ evec[0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'evec' is not defined
>>> m @ evecs[0,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 497, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> m @ evecs[0,None,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> m @ evecs[[0],:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> m @ evecs[0,:][None,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> evecs[0,:]
array([ 3.74039029e-02, 5.20195025e-02, -6.40403185e-03, -6.26245188e-10])
>>> m @ evecs[:,0]
array([ 0.33432849, -0.09322168, -0.00890129, ..., 0.105405 ,
-0.29197974, -0.02978163])
>>> m @ evecs[:,0] / evecs[:,0]
array([ 8.93833177, 1.96571957, -2.34015557, ..., -16.79534333,
18.50840858, -34.77026623])
>>> m @ evecs[:,1] / evecs[:,1]
array([ 2.77632351e-07, 6.29843779e-07, 8.55354915e-01, ...,
8.68956469e-08, 2.17002838e-06, -4.21830302e-04])
>>> (m @ evecs[:,1]) / evecs[:,1]
array([ 2.77632351e-07, 6.29843779e-07, 8.55354915e-01, ...,
8.68956469e-08, 2.17002838e-06, -4.21830302e-04])
>>> (m @ evecs[:,2]) / evecs[:,2]
array([ 6.69492082e-06, -2.30612609e-07, -5.34772656e+00, ...,
2.32376482e-06, -7.19652543e-07, 2.98043380e-04])
>>> (m @ evecs[:,2][None,:]) / evecs[:,2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> (m @ evecs[:,2][None,:]) / evecs[:,2][None,:]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> (m @ evecs[:,2][None,:])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 559, in __matmul__
return self.__mul__(other)
File "/home/lampam/asd/clone/scipy/scipy/sparse/base.py", line 515, in __mul__
raise ValueError('dimension mismatch')
ValueError: dimension mismatch
>>> evecs[:,2][None,:]
array([[-6.40403185e-03, -5.20194951e-02, -2.13441421e-10, ...,
-5.81539061e-03, -5.20886800e-02, 1.28150719e-05]])
>>> (m @ evecs[:,2][:,None])
array([[-4.28744861e-08],
[ 1.19963515e-08],
[ 1.14142636e-09],
...,
[-1.35136001e-08],
[ 3.74857510e-08],
[ 3.81944734e-09]])
>>> (m @ evecs[:,2][:,None]) / evecs[:,2][:,None]
array([[ 6.69492082e-06],
[-2.30612609e-07],
[-5.34772656e+00],
...,
[ 2.32376482e-06],
[-7.19652543e-07],
[ 2.98043380e-04]])
>>> (m @ evecs[:,3][:,None]) / evecs[:,3][:,None]
array([[-2.19304152e-01],
[ 1.81887449e-01],
[ 6.97473644e-11],
...,
[-4.72068201e-02],
[-1.92302654e+00],
[ 2.33396466e-10]])
>>> (m @ evecs[:,3][:,None] - evals[3] * evecs[:,3][:,None])
array([[ 1.37338170e-10],
[-3.82995035e-11],
[-3.65588819e-12],
...,
[ 4.32965505e-11],
[-1.19939656e-10],
[-1.22334321e-11]])
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='LA')
^C^[[A^[[D^[[D^[[D^[[D^[[D^[[D^C^C^C^C^C^C^C^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1613, in eigsh
symmetric=True, tol=tol)
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1049, in get_OPinv_matvec
return get_inv_matvec(A, symmetric=symmetric, tol=tol)
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1042, in get_inv_matvec
return SpLuInv(M).matvec
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 915, in __init__
self.M_lu = splu(M)
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/dsolve/linsolve.py", line 309, in splu
ilu=False, options=_options)
KeyboardInterrupt
>>> (evals,evecs) = spla.eigsh(m, k=4, maxiter=30, ncv=25, which='LA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 0/4 eigenvectors converged)
>>> (evals,evecs) = spla.eigsh(m, k=4, ncv=25, which='LA')
30 iterations
>>> evals
array([10.85983542, 10.85984277, 10.86362013, 10.86362886])
>>> (m @ evecs[:,2][:,None]) / evecs[:,2][:,None]
array([[10.8625413 ],
[10.85813506],
[10.86362013],
...,
[10.86362013],
[10.86362013],
[10.86362013]])
>>> (m @ evecs[:,3][:,None]) / evecs[:,3][:,None]
array([[10.83867541],
[10.86291009],
[10.86362886],
...,
[10.86362886],
[10.86362886],
[10.86362886]])
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 3/4 eigenvectors converged)
>>> (evals,evecs) = spla.eigsh(m, k=4, sigma=0, maxiter=30, ncv=25, which='SA')
1 iterations
>>> evals
array([-6.54957529e-04, -7.42441065e-10, -7.42440575e-10, -2.56385420e-15])
>>> (m @ evecs[:,0][:,None]) / evecs[:,0][:,None]
array([[ 0.04059912],
[ 8.18640569],
[ 1.16094026],
...,
[ -1.99874594],
[ 8.70126585],
[-12.22762544]])
>>> (evalsL,evecsL) = spla.eigsh(m, k=4, ncv=25, which='LA')
92 iterations
>>> def normalize(a): return a / np.norm(a)
...
>>> normalize([1,2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in normalize
AttributeError: module 'numpy' has no attribute 'norm'
>>> def normalize(a): return a / a.norm()
...
>>> normalize(np.array([1,2,3]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in normalize
AttributeError: 'numpy.ndarray' object has no attribute 'norm'
>>> def normalize(a): return a / np.sqrt(np.sum(np.square(a)))
...
>>> normalize([1,2,3])
array([0.26726124, 0.53452248, 0.80178373])
>>> np.vdot(normalize(m @ evecsL[:,0][:,None]), normalize(evecsL[:,0][:,None]))
0.9999999999999998
>>> np.vdot(normalize(m @ evecsL[:,1][:,None]), normalize(evecsL[:,1][:,None]))
1.0
>>> np.vdot(normalize(m @ evecsL[:,2][:,None]), normalize(evecsL[:,2][:,None]))
1.0
>>> np.vdot(normalize(m @ evecsL[:,2][:,None]), normalize(evecs[:,2][:,None]))
-2.419081482096336e-09
>>> np.vdot(normalize(m @ evecs[:,2][:,None]), normalize(evecs[:,2][:,None]))
-0.0017878162688716906
>>> (evalsSA,evecsSA) = spla.eigsh(m, k=3, maxiter=30, ncv=25, which='SA')
31 iterations
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 570, in iterate
self._raise_no_convergence()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 375, in _raise_no_convergence
raise ArpackNoConvergence(msg % (num_iter, k_ok, self.k), ev, vec)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackNoConvergence: ARPACK error -1: No convergence (31 iterations, 0/3 eigenvectors converged)
>>> (evalsSA,evecsSA) = spla.eigsh(m, k=3, maxiter=30, ncv=25, which='SA')
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 537, in iterate
self.ipntr, self.workd, self.workl, self.info)
KeyboardInterrupt
>>> (evalsSA,evecsSA) = spla.eigsh(m, k=3, ncv=25, which='SA')
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 1658, in eigsh
params.iterate()
File "/home/lampam/asd/clone/scipy/scipy/sparse/linalg/eigen/arpack/arpack.py", line 537, in iterate
self.ipntr, self.workd, self.workl, self.info)
KeyboardInterrupt
>>> (evalsSA,evecsSA) = spla.eigsh(m, k=3, ncv=250, which='SA')
10 iterations
>>> evalsSA
array([-7.42451197e-10, -7.42437037e-10, -3.93353846e-15])
>>> np.vdot(normalize(m @ evecsSA[:,2][:,None]), normalize(evecsSA[:,2][:,None]))
-0.12631758730141507
>>> np.vdot(normalize(m @ evecsSA[:,1][:,None]), normalize(evecsSA[:,1][:,None]))
-0.9999999994851148
>>> np.vdot(normalize(m @ evecsSA[:,1]), normalize(evecsSA[:,1]))
-0.9999999994851148
>>> np.vdot(normalize(m @ evecsSA[:,0]), normalize(evecsSA[:,0]))
-0.9999999995626186
>>> (evalsSA,evecsSA) = spla.eigsh(m, k=8, ncv=250, which='SA')
7 iterations
>>> evalsSA
array([-7.42451042e-10, -7.42442909e-10, -1.04697980e-14, 3.10599130e-06,
3.10599130e-06, 2.19728078e-03, 2.23392624e-03, 2.23392624e-03])
>>> 15.6333043006705 * 33.3564095198152 * abs(3.10599130e-06) ** 0.5
0.919031074275525
>>> np.vdot(normalize(m @ evecsSA[:,3]), normalize(evecsSA[:,3]))
1.0000000000000002
>>> np.vdot(normalize(m @ evecsSA[:,4]), normalize(evecsSA[:,4]))
1.0
>>> np.vdot(normalize(m @ evecsSA[:,5]), normalize(evecsSA[:,5]))
1.0000000000000002
>>> np.vdot(normalize(m @ evecsSA[:,6]), normalize(evecsSA[:,6]))
1.0
>>>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment