scvi-tools
scvi-tools copied to clipboard
ArpackError happened when running sc.tl.pca
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