10

scipy を使用して、大規模なデータに対して疎行列 svd を実行していました。行列は約 200,000*8,000,000 のサイズで、1.19% のゼロ以外のエントリがあります。私が使用していたマシンには160Gのメモリが搭載されているので、メモリは問題にならないと思います。

だからここに私が使用したいくつかのコードがあります:

from scipy import *
from scipy.sparse import *
import scipy.sparse.linalg as slin
from numpy import *
K=1500
coom=coo_matrix((value,(row,col)),shape=(M,N))
coom=coom.astype('float32')
u,s,v=slin.svds(coom,K,ncv=8*K)

エラーメッセージは次のようになります。

Traceback (most recent call last):
  File "sparse_svd.py", line 35, in <module>
    u,s,v=slin.svds(coom,K,ncv=2*K+1)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 731, in svds
    eigvals, eigvec = eigensolver(XH_X, k=k, tol=tol**2)
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 680, in eigsh
    params.iterate()
  File "/usr/lib/python2.7/dist-packages/scipy/sparse/linalg/eigen/arpack/arpack.py", line 278, in iterate
    raise ArpackError(self.info)
scipy.sparse.linalg.eigen.arpack.arpack.ArpackError: ARPACK error 3: No shifts could be applied during a cycle of the Implicitly restarted Arnoldi iteration. One possibility is to increase the size of NCV relative to NEV.

K=1000 (つまり #eigen values=1000) の場合、すべて問題ありません。K>=1250 を試すと、エラーが表示され始めます。さまざまな ncv 値も試しましたが、同じエラー メッセージが表示されます...

任意の提案と助けをいただければ幸いです。どうもありがとう :)

4

0 に答える 0