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

Surjya Narayana Padhi picture Surjya Narayana Padhi · May 13, 2013 · Viewed 15.3k times · Source

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?

Answer

Mark Ransom picture Mark Ransom · May 13, 2013

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]