Source code for proteopy.utils.array

import numpy as np
from scipy import sparse 


[docs] def is_log_transformed( adata, layer=None, neg_frac_thresh=5e-3, p95_thresh=100.0 ): """ Heuristic detector for log-transformed matrices. Returns ------- is_log : bool True if the matrix looks log-transformed. stats : dict {'frac_negative', 'p95', 'p5', 'dynamic_range_ratio', 'n_finite'} """ Xsrc = adata.layers[layer] if layer is not None else adata.X X = Xsrc.toarray() if sparse.issparse(Xsrc) else np.asarray(Xsrc) X = X.astype(float, copy=False) finite = np.isfinite(X) vals = X[finite] if vals.size == 0: raise ValueError("No finite values found.") frac_negative = float(np.mean(vals < 0)) p95 = float(np.nanpercentile(vals, 95)) p5 = float(np.nanpercentile(vals, 5)) # avoid divide-by-zero in very degenerate cases dr_ratio = float((p95 - p5) / max(abs(p5), 1e-12)) # Simple decision is_log = (frac_negative >= neg_frac_thresh) or (p95 <= p95_thresh) stats = dict( frac_negative=frac_negative, p95=p95, p5=p5, dynamic_range_ratio=dr_ratio, n_finite=int(vals.size), ) return bool(is_log), stats