Search code examples
pythonlistrangenormalize

How to normalize a list of positive and negative decimal number to a specific range


I have a list of decimal numbers as follows:

[-23.5, -12.7, -20.6, -11.3, -9.2, -4.5, 2, 8, 11, 15, 17, 21]

I need to normalize this list to fit into the range [-5,5].
How can I do it in python?


Solution

  • To get the range of input is very easy:

    old_min = min(input)
    old_range = max(input) - old_min
    

    Here's the tricky part. You can multiply by the new range and divide by the old range, but that almost guarantees that the top bucket will only get one value in it. You need to expand your output range so that the top bucket is the same size as all the other buckets.

    new_min = -5
    new_range = 5 + 0.9999999999 - new_min
    output = [floor((n - old_min) / old_range * new_range + new_min) for n in input]