diff --git a/src/scanpy/preprocessing/_scale.py b/src/scanpy/preprocessing/_scale.py index 07f55089c3..99ef971eb2 100644 --- a/src/scanpy/preprocessing/_scale.py +++ b/src/scanpy/preprocessing/_scale.py @@ -30,6 +30,10 @@ if TYPE_CHECKING: from numpy.typing import ArrayLike, NDArray + from numpy.typing import NDArray + from scipy import sparse as sp + + CSMatrix = sp.csr_matrix | sp.csc_matrix CSMatrix = csr_matrix | csc_matrix @@ -75,6 +79,14 @@ def clip_array( return X +def clip_set(x: CSMatrix, *, max_value: float, zero_center: bool = True) -> CSMatrix: + x = x.copy() + x[x > max_value] = max_value + if zero_center: + x[x < -max_value] = -max_value + return x + + @renamed_arg("X", "data", pos_0=True) @old_positionals("zero_center", "max_value", "copy", "layer", "obsm") @singledispatch