Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. from scanpy.neighbors import Neighbors
  2. from anndata import AnnData
  3. from typing import Union, Optional, Any, Mapping, Callable, NamedTuple, Generator, Tuple
  4. from numpy.random import RandomState
  5. import numpy as np
  6.  
  7. Metric = Callable[[np.ndarray, np.ndarray], float]
  8. import scanpy.logging as logg
  9. N_DCS = 15 # default number of diffusion components
  10.  
  11. def neighbors(
  12. adata: AnnData,
  13. n_neighbors: int = 15,
  14. n_pcs: Optional[int] = None,
  15. use_rep: Optional[str] = None,
  16. knn: bool = True,
  17. mutual: bool = False,
  18. random_state: Optional[Union[int, RandomState]] = 0,
  19. method: str = 'umap',
  20. metric: Union[str, Metric] = 'euclidean',
  21. metric_kwds: Mapping[str, Any] = {},
  22. copy: bool = False,
  23. ) -> Optional[AnnData]:
  24. start = logg.info('computing neighbors')
  25. adata = adata.copy() if copy else adata
  26. if adata.isview: # we shouldn't need this here...
  27. adata._init_as_actual(adata.copy())
  28. neighbors = Neighbors(adata)
  29. neighbors.compute_neighbors(
  30. n_neighbors=n_neighbors, knn=knn, n_pcs=n_pcs, use_rep=use_rep,
  31. method=method, metric=metric, metric_kwds=metric_kwds,
  32. random_state=random_state, write_knn_indices=mutual,
  33. )
  34. adata.uns['neighbors'] = {}
  35. adata.uns['neighbors']['params'] = {'n_neighbors': n_neighbors, 'method': method}
  36. adata.uns['neighbors']['params']['metric'] = metric
  37. if metric_kwds:
  38. adata.uns['neighbors']['params']['metric_kwds'] = metric_kwds
  39. if use_rep is not None:
  40. adata.uns['neighbors']['params']['use_rep'] = use_rep
  41. if n_pcs is not None:
  42. adata.uns['neighbors']['params']['n_pcs'] = n_pcs
  43. adata.uns['neighbors']['distances'] = neighbors.distances
  44. adata.uns['neighbors']['connectivities'] = neighbors.connectivities
  45. if mutual:
  46. import scipy.sparse as sp
  47.  
  48. lm = sp.lil_matrix((adata.n_obs, adata.n_obs))
  49. lm.rows = neighbors.knn_indices
  50. lm.data = np.ones_like(neighbors.knn_indices)
  51. lm = lm.tocsr()
  52. lm.setdiag(0)
  53. lm.eliminate_zeros()
  54. lm = lm.multiply(lm.T) # build mnn mask
  55.  
  56. adata.uns['neighbors']['distances'] = adata.uns['neighbors']['distances'].multiply(lm)
  57. adata.uns['neighbors']['connectivities'] = adata.uns['neighbors']['connectivities'].multiply(lm)
  58.  
  59. if neighbors.rp_forest is not None:
  60. adata.uns['neighbors']['rp_forest'] = neighbors.rp_forest
  61. logg.info(
  62. ' finished',
  63. time=start,
  64. deep=(
  65. 'added to `.uns[\'neighbors\']`\n'
  66. ' \'distances\', distances for each pair of neighbors\n'
  67. ' \'connectivities\', weighted adjacency matrix'
  68. ),
  69. )
  70. return adata if copy else None
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement