Source code for draugr.torch_utilities.tensors.normalise

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "Christian Heider Nielsen"
__doc__ = r"""

           Created on 21/02/2020
           """

from typing import Union

import numpy
import torch

__all__ = ["standardise"]

from warg import Number


def minus_one_one_unnormalise(
    x: Union[Number, torch.Tensor, numpy.ndarray], low: float = 0, high: float = 1
) -> torch.tensor:
    """description"""
    act_k = (high - low) / 2.0
    act_b = (high + low) / 2.0
    return act_k * x + act_b


def minus_one_one_normalise(
    x: Union[Number, torch.Tensor, numpy.ndarray], low: float = 0, high: float = 1
) -> torch.tensor:
    """description"""
    act_k_inv = 2.0 / (high - low)
    act_b = (high + low) / 2.0
    return act_k_inv * (x - act_b)


[docs]def standardise(x: torch.Tensor, eps: float = 1e-6) -> torch.tensor: """ :param eps: :param x: :return:""" x -= x.mean() x /= x.std() + eps return x
if __name__ == "__main__": print(standardise(torch.ones(10))) print(standardise(torch.ones((10, 1)))) print(standardise(torch.ones((1, 10)))) print(standardise(torch.diag(torch.ones(3)))) print(standardise(torch.ones((1, 10)) * torch.rand((1, 10)))) print(standardise(torch.rand((1, 10)))) print(minus_one_one_normalise(7, 0, 10)) print(minus_one_one_unnormalise(0.4, 0, 10)) print(minus_one_one_normalise(minus_one_one_unnormalise(3.4, 3, 4), 3, 4))