scv.tl.paga
hvgogogo opened this issue · 5 comments
Hi team, I used the example data to run the scv.tl.page step and encounts the following error. I guess it's the imcompelity with paga.compute_transitions() funtion?
many thanks
...
# paste your code here, if applicable
# this is needed due to a current bug - bugfix is coming soon.
data.uns['neighbors']['distances'] = data.obsp['distances']
data.uns['neighbors']['connectivities'] = data.obsp['connectivities']
scv.tl.paga(data, groups='clusters')
df = scv.get_df(adata, 'paga/transitions_confidence', precision=2).T
df.style.background_gradient(cmap='Blues').format('{:.2g}')
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scvelo/tools/paga.py:288, in paga(adata, groups, vkey, use_time_prior, root_key, end_key, threshold_root_end_prior, minimum_spanning_tree, copy)
285 adata.uns["paga"]["connectivities_tree"] = paga.connectivities_tree
286 adata.uns[f"{groups}_sizes"] = np.array(paga.ns)
--> 288 paga.compute_transitions()
289 adata.uns["paga"]["transitions_confidence"] = paga.transitions_confidence
290 adata.uns["paga"]["threshold"] = paga.threshold
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scvelo/tools/paga.py:142, in PAGA_tree.compute_transitions(self)
140 vc = igraph.VertexClustering(g, membership=membership)
141 cg_full = vc.cluster_graph(combine_edges="sum")
--> 142 transitions = get_sparse_from_igraph(cg_full, weight_attr="weight")
143 transitions = transitions - transitions.T
144 transitions_conf = transitions.copy()
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scvelo/tools/paga.py:51, in get_sparse_from_igraph(graph, weight_attr)
49 shape = (shape, shape)
50 if len(edges) > 0:
---> 51 return csr_matrix((weights, zip(*edges)), shape=shape)
52 else:
53 return csr_matrix(shape)
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scipy/sparse/_compressed.py:55, in _cs_matrix.init(self, arg1, shape, dtype, copy)
52 else:
53 if len(arg1) == 2:
54 # (data, ij) format
---> 55 coo = self._coo_container(arg1, shape=shape, dtype=dtype)
56 arrays = coo._coo_to_compressed(self._swap)
57 self.indptr, self.indices, self.data, self._shape = arrays
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scipy/sparse/_coo.py:99, in _coo_base.init(self, arg1, shape, dtype, copy)
96 if dtype is not None:
97 self.data = self.data.astype(dtype, copy=False)
---> 99 self._check()
File ~/anaconda3/envs/localpy/lib/python3.9/site-packages/scipy/sparse/_coo.py:188, in _coo_base._check(self)
186 """ Checks data structure for consistency """
187 if self.ndim != len(self.coords):
--> 188 raise ValueError('mismatching number of index arrays for shape; '
189 f'got {len(self.coords)}, expected {self.ndim}')
191 # index arrays should have integer data types
192 for i, idx in enumerate(self.coords):
ValueError: mismatching number of index arrays for shape; got 0, expected 2
Error output
# paste the error output here, if applicable
Versions
# paste the ouput of scv.logging.print_versions() here
scvelo==0.3.2 scanpy==1.10.1 anndata==0.10.7 loompy==3.0.7 numpy==1.26.4 scipy==1.13.0 matplotlib==3.8.4 sklearn==1.4.2 pandas==2.2.2
Hello, I met the same problem. o(╥﹏╥)o
Hello, I met the same problem. o(╥﹏╥)o
after screening the codes, i find that the problem arised from function:
get_sparse_from_igraph()
it works if you modify the codes from:
if len(edges) > 0:
return csr_matrix((weights, zip(*edges)), shape=shape)
to:
rows, cols = zip(*edges)
if len(edges) > 0:
return csr_matrix((weights, (rows, cols)), shape=shape)
😃
Hello, I met the same problem. o(╥﹏╥)o
after screening the codes, i find that the problem arised from function: get_sparse_from_igraph()
it works if you modify the codes from: if len(edges) > 0: return csr_matrix((weights, zip(*edges)), shape=shape) to: rows, cols = zip(*edges) if len(edges) > 0: return csr_matrix((weights, (rows, cols)), shape=shape)
😃
I install scipy==1.11.4 to avoid the self._check() error, and solve this problem.
I am having the same problem. Installing scipy==1.11.4 got rid of this problem but I got another error instead when running scv.tl.paga:
TypeError: sparse array length is ambiguous; use getnnz() or shape[0]
Hello, I met the same problem. o(╥﹏╥)o
after screening the codes, i find that the problem arised from function: get_sparse_from_igraph()
it works if you modify the codes from: if len(edges) > 0: return csr_matrix((weights, zip(*edges)), shape=shape) to: rows, cols = zip(*edges) if len(edges) > 0: return csr_matrix((weights, (rows, cols)), shape=shape)
😃
it worked!~~~ thx~