Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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|cite|improve this question
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|cite|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

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.