DeaD_EyE icon

MinMaxScaler

DeaD_EyE | PRO | 09/29/22 04:23:39 PM UTC | 0 ⭐ | 1442 👁️ | Never ⏰ | []
Python |

1.51 KB

|

None

|

0 👍

/

0 👎

from contextlib import suppress
 
 
class MinMaxScaler:
    """
    This class scales raw values automatically.
    The min/max values are set by the `scale` method when called.
    At least two different values must be given for the scaling to work.
 
    The purpose of this class is to be used for a VR glove
    where all potentiometers are set differently.
 
    By gripping and opening the hand,
    the min/max values are automatically set
    and then scaled to the full range.
 
    This has the advantage that the full range of the raw value is covered
    and does not need to be adjusted in VR runtime.
    """
 
    def __init__(self, raw_min, raw_max):
        self.min = None
        self.max = None
        self.raw_min = raw_min
        self.raw_max = raw_max
 
    def scale(self, value):
        if self.min is None:
            self.min = value
        else:
            self.min = min(self.min, value)
 
        if self.max is None:
            self.max = value
        else:
            self.max = max(self.max, value)
 
        with suppress(ZeroDivisionError):
            slope = self.max - self.min
            return int((value - self.min) / slope * self.raw_max + self.raw_min)
 
        return 0
 
 
mm = MinMaxScaler(raw_min=0, raw_max=2**12 - 1)
# raw_max is in this example a 12 bit value from an ADC: 4095
mm.scale(512)  # first min == max, result not useable.
mm.scale(1023)  # second value, this time max is set
 
mm.scale(767)  # now the value is half between 512 and 1023

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎