I have a set of numbers, {2,3,2,4,5,10,9,9,7,12}, and I would like to change the scale. Want the lowest value to be a 1 and the highest value a 5, and the rest should map accordingly. Assuming I want to do this linearly, it’s as simple as two mx+b=c and solving for m and b.
Here’s the simple solution:
- sH is the high bounds of the new scale.
- sL is the low bounds of the new scale.
- vmax is the max value in your original set.
- vmin is the min value in your original set.
Using these values, calculate m and b:
- m = (sH – sL) / (vmax – vmin)
- b = sH – vmax*m
Now using the m and b values, find the scaled values for each item in your set:
- m*orignal_value + b = scaled_value
Using my example set of {2,3,4,5,7,9,10,12} and scaling between 1 and 5.
- m = (5-1)/(12-2) = 4 / 10 = 0.4
- b = 5 – 12*.4 = 5 – 4.8 = 0.2
- 0.4*x + 0.2 = y
Applying this to the original set, we end up with {1, 1.4, 1.8, 2.2, 3, 3.8, 4.2, 5}.
{ 0 comments }