0

我的数字范围为 1 - 0.00000X 。大多数是小数字,例如 0.000823。我如何映射它们以使它们的范围更近?我使用 sqrt 方法,但还有其他建议吗?

更新

1-0.1 之间的示例数字我对它们没有问题。我的问题是低于 0.1 的数字。我需要使它们更接近 0.1。

  • .00004 -> 0.0004 或 0.004
  • 0.023 -> 0.05 或 0.09
4

2 回答 2

3

你试过对数吗?

如果你的数字满足eps < x <= 1,函数

y = 1 - C*log(x)在哪里C = 1/-log(eps)

将数字映射到范围 0..1。如果不需要范围,只要数字靠近,您可以删除比例因子。

编辑:这当然可以不用减法来表达。

y = 1 + C*log(x)在哪里C = 1/log(eps)

例如,对于 0.0000000001 (10^-10) 的 epsilon,您会得到 C = -0.1 并且:

0.0000000001 => 0
0.000000001  => 0.1
0.00000001   => 0.2
...
0.1          => 0.9
1            => 1

编辑:如果您不想将范围从 0.1 ... 1.0 更改为较小的数字,则只需将范围从 0 ... 0.1 缩放。这可以通过在应用函数之前将 x 乘以 10 来完成,然后再除以 10。当然,在这种情况下,仅当值小于 0.1 时才使用比例函数。

于 2012-04-05T14:31:48.187 回答
0

好吧,一种简单的方法是计算最小值(例如1-t),然后将段重新映射[1-t, 1][0, 1]。映射函数可以是线性的:

xnew = (xold - 1) / t + 1

(当然t = 1 - min value

于 2012-04-05T14:31:30.327 回答