scanpy.pp.normalize_per_cell(data, counts_per_cell_after=None, counts_per_cell=None, key_n_counts='n_counts', copy=False, layers=(), use_rep=None, min_counts=1)[source]#

Normalize total counts per cell.


Deprecated since version 1.3.7: Use normalize_total() instead. The new function is equivalent to the present function, except that

  • the new function doesn’t filter cells based on min_counts, use filter_cells() if filtering is needed.

  • some arguments were renamed

  • copy is replaced by inplace

Normalize each cell by total counts over all genes, so that every cell has the same total count after normalization.

Similar functions are used, for example, by Seurat [Satija et al., 2015], Cell Ranger [Zheng et al., 2017] or SPRING [Weinreb et al., 2017].

data AnnData | ndarray | spmatrix

The (annotated) data matrix of shape n_obs × n_vars. Rows correspond to cells and columns to genes.

counts_per_cell_after float | None (default: None)

If None, after normalization, each cell has a total count equal to the median of the counts_per_cell before normalization.

counts_per_cell ndarray | None (default: None)

Precomputed counts per cell.

key_n_counts str (default: 'n_counts')

Name of the field in adata.obs where the total counts per cell are stored.

copy bool (default: False)

If an AnnData is passed, determines whether a copy is returned.

min_counts int (default: 1)

Cells with counts less than min_counts are filtered out during normalization.

Return type:

AnnData | ndarray | spmatrix | None


Returns None if copy=False, else returns an updated AnnData object. Sets the following fields:

adata.Xnumpy.ndarray | scipy.sparse._csr.csr_matrix (dtype float)

Normalized count data matrix.


>>> import scanpy as sc
>>> adata = AnnData(np.array([[1, 0], [3, 0], [5, 6]], dtype=np.float32))
>>> print(adata.X.sum(axis=1))
[ 1.  3. 11.]
>>> sc.pp.normalize_per_cell(adata)
>>> print(adata.obs)
0       1.0
1       3.0
2      11.0
>>> print(adata.X.sum(axis=1))
[3. 3. 3.]
>>> sc.pp.normalize_per_cell(
...     adata, counts_per_cell_after=1,
...     key_n_counts='n_counts2',
... )
>>> print(adata.obs)
   n_counts  n_counts2
0       1.0        3.0
1       3.0        3.0
2      11.0        3.0
>>> print(adata.X.sum(axis=1))
[1. 1. 1.]