在比例尺上映射数字

mapping numbers on a scale

我有一个最大为 20000 的数字数组,我正在尝试为这些数字分配权重:

数字越接近0,权重就应该越高。我的问题是我试图使数字越大,重量差异应该越小,例如 1-100 之间的重量差异可能是 1.5 但 100-10000 之间的差异可能是 0.5 .

我认为这是一个对数刻度,不是吗?我数学不是很好..这不是家庭作业问题,学校很久以前就放学了只是一个爱好问题。

我尝试的是通过对 25000-value 求平方根将权重映射到我的数字数组,但这不是我要找的。我只是把它放进去,这样我就可以看到权重的梯度回来了,而且数字太大了,理想情况下我希望权重在 0.01 到 3 之间。

我没有任何代码可以显示,如有任何帮助,我们将不胜感激。

虽然您的问题并不是真正的 C# 问题,但我可能会为您提供答案。 要以对数间距缩放值,可以使用以下公式:

你说你的最大值是 20000 并且你想将值从 0.01 缩放到最大值 3,所以我们需要插入最大值并缩放我们的公式:

// 编辑: 值也应该反转,所以从 1 中减去对数:

这为 x 的值提供了以下值 f(x)

f(0) = 3
f(1) = 2.79
f(10) = 2.27
f(100) = 1.60
f(1000) = 0.91
f(10000) = 0.21
f(20000) = 0

这对你的情况是否足够?