Take the 2-minute tour ×

I have an array of numbers I'd like to normalize. Problem is that I do not want a linear normalization. The numbers represent a ranking of people and I want the values to be spread between 0 and 10 inclusive and it should be easy to climb the lower ranks and hard for the hard ones.

I was thinking about distributing them similar to a logarithmic scale, but have no idea on how to do that.

Any idea

share|improve this question
add comment

1 Answer

up vote 5 down vote accepted

You can certainly make breakpoints anything you want. For example, if the range of raw scores is $1$ to $1024$, you could take the base $2$ log and get $0$ to $10$. Then to get from $9$ to $10$ you need $512$ added raw points. If your range is $a$ to $b$ you can just do a linear rescaling to get to $1$ to $1024$: $scaled=1+1023\frac{raw-a}{b-a}$, then take the log. Does this help?

share|improve this answer
That sounds just like the thing I needed. And surprisingly simple :-) –  cdecker Apr 25 '11 at 12:50
In the end I used the following: $log_2(1+1023\cdot rank/maxRank)$ since $log_2(1024)=10$ is my desired maximum and I prescale the maximum to be $1$. –  cdecker Apr 25 '11 at 13:09
Presumably you prescale the minimum to 1. In that case your minimum will now be a little larger than 1 (the $-a$'s in my expression took care of that). But it is small, and if it works for you, great. –  Ross Millikan Apr 25 '11 at 13:36
add comment

Your Answer


