Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 340
Surjya Narayana Padhi Avatar asked May 13 '13 03:05

Surjya Narayana Padhi


People also ask

How do you normalize data between 0 and any number?

We can actually use this formula to normalize a dataset between 0 and any number: zi = (xi – min (x)) / (max (x) – min (x)) * Q where Q is the maximum number you want for your normalized data values.

How do you normalize a list with negative numbers?

if your list has negative numbers, this is how you would normalize it a = range (-30,31,5) norm = [ (float (i)-min (a))/ (max (a)-min (a)) for i in a]

How do you get the minimum value of a given range?

1st transform the numbers to have a range from 0 to z. 2nd transform the range 0 to z into a range 0 to 1. 3rd transform the range 0 to 1 to x n e w to y n e w. Subtract the minimum value from each number in your array. This will force the minimum to become 0. Note that it works even if your data has negative numbers!

How to calculate normalization equation?

The equation of calculation of normalization can be derived by using the following simple four steps: Firstly, identify the minimum and maximum value in the data set, and they are denoted by x minimum and x maximum. Next, calculate the range of the data set by deducting the minimum value from the maximum value.


1 Answers

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]
like image 119
Mark Ransom Avatar answered Sep 19 '22 17:09

Mark Ransom