From 1c22331b1c8c89307e80f7cb49b4047e161057f1 Mon Sep 17 00:00:00 2001 From: leufen1 <l.leufen@fz-juelich.de> Date: Thu, 18 Feb 2021 13:37:24 +0100 Subject: [PATCH] added description, /close #275 --- mlair/helpers/statistics.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/mlair/helpers/statistics.py b/mlair/helpers/statistics.py index 0a25644c..ea5a9f05 100644 --- a/mlair/helpers/statistics.py +++ b/mlair/helpers/statistics.py @@ -155,20 +155,47 @@ def min_max_apply(data: Data, min: Data, max: Data) -> Data: def log(data: Data, dim: Union[str, int]) -> Tuple[Data, Dict[(str, Data)]]: + """ + Apply logarithmic transformation (and standarization) to data. This method first uses the logarithm for + transformation and second applies the `standardise` method additionally. A logarithmic function numpy's log1p is + used (`res = log(1+x)`) instead of the pure logarithm to be applicable to values of 0 too. + + :param data: transform this data + :param dim: name (xarray) or axis (pandas) of dimension which should be transformed + :return: transformed data, and option dictionary with keys method, mean, and std + """ transformed_standardized, opts = standardise(np.log1p(data), dim) opts.update({"method": "log"}) return transformed_standardized, opts -def log_apply(data: Data, mean: Data, std: Data) -> Data: - return standardise_apply(np.log1p(data), mean, std) - - def log_inverse(data: Data, mean: Data, std: Data) -> Data: + """ + Apply inverse log transformation (therefore exponential transformation). Because `log` is using `np.log1p` this + method is based on the equivalent method `np.exp1m`. Data are first rescaled using `standardise_inverse` and then + given to the exponential function. + + :param data: apply inverse log transformation on this data + :param mean: mean of the standarization + :param std: std of the standarization + :return: inverted data + """ data_rescaled = standardise_inverse(data, mean, std) return np.expm1(data_rescaled) +def log_apply(data: Data, mean: Data, std: Data) -> Data: + """ + Apply numpy's log1p on given data. Further information can be found in description of `log` method. + + :param data: transform this data + :param mean: mean of the standarization + :param std: std of the standarization + :return: transformed data + """ + return standardise_apply(np.log1p(data), mean, std) + + def mean_squared_error(a, b): """Calculate mean squared error.""" return np.square(a - b).mean() -- GitLab