C# 在比例尺上映射数字

C# 在比例尺上映射数字,c#,mapping,logarithm,C#,Mapping,Logarithm,我有一个多达20000个数字的数组,我正在尝试为这些数字分配权重: 数字越接近0,权重就越高。我的问题是,我试图使数字越大,重量差越小,例如,1-100之间的重量差可能是1.5,但100-10000之间的重量差可能是0.5 我认为这是对数刻度,不是吗?我的数学一点也不好。。这不是家庭作业问题,学校很久以前就不上课了,只是一个爱好问题 我尝试的是通过对25000值进行平方根运算,将权重映射到我的数字数组,但这不是我想要的。我只是把它放进去,这样我就可以看到权重的梯度回来,加上数字太大了,理想情况下

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

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

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

我尝试的是通过对
25000值进行平方根运算,将权重映射到我的数字数组,但这不是我想要的。我只是把它放进去,这样我就可以看到权重的梯度回来,加上数字太大了,理想情况下我希望权重在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

这对你的情况够了吗?

请给出一些图表的数字,给我们举一些例子。给我们看看你的代码。我要做的是0必须是3,20000必须是0.01,接近0的权重越高,但是对数刻度是我想要达到的。谢谢,我将编辑我的帖子。