在比例尺上映射数字
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
这对你的情况是否足够?
我有一个最大为 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
这对你的情况是否足够?