scvi-tools icon indicating copy to clipboard operation
scvi-tools copied to clipboard

ArpackError happened when running sc.tl.pca

Open XUEbaogai0101 opened this issue 3 years ago • 0 comments

I followed the api_overview.ipynb step by step and trained a successful model. When I want to run PCA then generate UMAP plots under guiding, the error happens. I tested the pbmc3k data with scanpy following the tutorial, 'Preprocessing and clustering 3k PBMCs', found that sc.tl.pca can work when I use sc.read_h5ad to read data but when I use scvi.data.read_h5ad to read data, sc.tl.pca failed with the same error.

sc.tl.pca(adata)
---------------------------------------------------------------------------
ArpackError                               Traceback (most recent call last)
Input In [10], in <cell line: 2>()
      1 # run PCA then generate UMAP plots
----> 2 sc.tl.pca(adata)
      3 sc.pp.neighbors(adata, n_pcs=30, n_neighbors=20)
      4 sc.tl.umap(adata, min_dist=0.3)

File ~/.local/lib/python3.9/site-packages/scanpy/preprocessing/_pca.py:200, in pca(data, n_comps, zero_center, svd_solver, random_state, return_info, use_highly_variable, dtype, copy, chunked, chunk_size)
    194 if svd_solver not in {'lobpcg', 'arpack'}:
    195     raise ValueError(
    196         'svd_solver: {svd_solver} can not be used with sparse input.\n'
    197         'Use "arpack" (the default) or "lobpcg" instead.'
    198     )
--> 200 output = _pca_with_sparse(
    201     X, n_comps, solver=svd_solver, random_state=random_state
    202 )
    203 # this is just a wrapper for the results
    204 X_pca = output['X_pca']

File ~/.local/lib/python3.9/site-packages/scanpy/preprocessing/_pca.py:303, in _pca_with_sparse(X, npcs, solver, mu, random_state)
    292     return XHmat(x) - mhmat(ones(x))
    294 XL = LinearOperator(
    295     matvec=matvec,
    296     dtype=X.dtype,
   (...)
    300     rmatmat=rmatmat,
    301 )
--> 303 u, s, v = svds(XL, solver=solver, k=npcs, v0=random_init)
    304 u, v = svd_flip(u, v)
    305 idx = np.argsort(-s)

File ~/miniconda3/envs/scvi/lib/python3.9/site-packages/scipy/sparse/linalg/_eigen/_svds.py:350, in svds(A, k, ncv, tol, which, v0, maxiter, return_singular_vectors, solver, random_state, options)
    348     if v0 is None and not rs_was_None:
    349         v0 = random_state.uniform(size=(min(A.shape),))
--> 350     eigvals, eigvec = eigsh(XH_X, k=k, tol=tol ** 2, maxiter=maxiter,
    351                             ncv=ncv, which=which, v0=v0)
    353 # Gramian matrices have real non-negative eigenvalues.
    354 eigvals = np.maximum(eigvals.real, 0)

File ~/miniconda3/envs/scvi/lib/python3.9/site-packages/scipy/sparse/linalg/_eigen/arpack/arpack.py:1689, in eigsh(A, k, M, sigma, which, v0, ncv, maxiter, tol, return_eigenvectors, Minv, OPinv, mode)
   1687 with _ARPACK_LOCK:
   1688     while not params.converged:
-> 1689         params.iterate()
   1691     return params.extract(return_eigenvectors)

File ~/miniconda3/envs/scvi/lib/python3.9/site-packages/scipy/sparse/linalg/_eigen/arpack/arpack.py:571, in _SymmetricArpackParams.iterate(self)
    569     self._raise_no_convergence()
    570 else:
--> 571     raise ArpackError(self.info, infodict=self.iterate_infodict)

ArpackError: ARPACK error -9999: Could not build an Arnoldi factorization. IPARAM(5) returns the size of the current Arnoldi factorization. The user is advised to check that enough workspace and array storage has been allocated.

Versions:

0.17.3 scanpy==1.8.2 anndata==0.8.0 umap==0.5.3 numpy==1.22.3 scipy==1.8.1 pandas==1.4.2 scikit-learn==1.1.1 statsmodels==0.13.2 python-igraph==0.9.11 pynndescent==0.5.7

XUEbaogai0101 avatar Aug 30 '22 14:08 XUEbaogai0101