Source code for SpaRCL._expression_denoising

# -*- coding: utf-8 -*-

from typing import Optional
from anndata import AnnData

import numpy as np
from scipy.sparse import issparse, csr_matrix


[docs]def expression_denoising( adata: AnnData, relation_key: Optional[str] = None, ) -> AnnData: ''' Denoise the gene expression matrix using gene relation matrix. Parameters ---------- adata Annotated data matrix. relation_key If not specified, it looks `.uns['relation']` for relational contrastive learning settings (default storage place for :func:`~SpaRCL.run_RCL`). If specified, it looks `.uns[relation_key]` for relational contrastive learning settings. Returns ------- Returns ``adata`` of used genes with the following fields updated. .X The denoised gene expression matrix. .layers['original'] The original gene expression matrix. ''' if relation_key is None: relation_key = 'relation' if relation_key not in adata.uns: raise ValueError(f'Did not find .uns["{relation_key}"].') adata_denoised = adata[:, adata.uns[relation_key]['gene_names']].copy() adata_denoised.layers['original'] = adata_denoised.X.copy() adata_denoised.X = csr_matrix(np.matmul( adata_denoised.X.toarray() if issparse(adata_denoised.X) else adata_denoised.X, adata_denoised.uns[relation_key]['gene_relation'].toarray(), )) return adata_denoised