2012-04-05 31 views
0

我有範圍從1 - 0.00000X範圍的數字。大多數是像0.000823這樣的小數字。我如何映射它們以使它們更接近範圍?我使用sqrt方法,但任何其他建議?正常化數字從1-.0000X到1 - 0.0X?

更新

例1-0.1之間 數字我沒有問題與他們。我的數字低於0.1的問題。我需要把它們接近0.1。

  • 0.00004 - > 0.0004或0.004英寸
  • 0.023 - > 0.05或0.09
+2

我可以想象映射這些值的方法很多;這將是最合適的取決於他們代表的東西以及他們如何使用。例如,使用sqrt會出現什麼問題? – 2012-04-05 14:23:14

+0

我希望數字在1-0的範圍內。我的問題是我有很多像0.000023這樣的低數字。 sqrt縮小了它們,但我需要更好的東西。例如具有4個或更多個0,.0000X或0.00000000X的數字我想將它們映射到1個也更小的事物,可能是0.000X甚至0.0X – tnaser 2012-04-05 14:25:08

+0

再次,定義「更好」。例如,我們可以將所有數字映射到0.1到1之間,然後均勻分佈在0到0.99之間。 – 2012-04-05 14:27:29

回答

3

Have you tried logarithms?

如果你的號碼滿足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)的ε,你會得到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時才使用比例函數。

+0

1- log(x),將給予低數字更多權重。例如.0003將會高於.3 – tnaser 2012-04-05 14:35:21

+0

當然可以。那麼'sqrt',你給出的例子是什麼? – hirschhornsalz 2012-04-05 14:38:26

+0

但是減去反向 – tnaser 2012-04-05 14:42:41

0

那麼,一個簡單的方法是計算的最小一個(比方說,1-t),並重新映射段[1-t, 1][0, 1]。映射函數可以是線性的:

xnew = (xold - 1)/t + 1 

(當然t = 1 - min value

+0

我需要映射在0和1之間 - – tnaser 2012-04-05 14:33:20

+0

@tnaser:是的,映射將在0和1之間。試試看:-) – Vlad 2012-04-05 14:34:14

+0

如果數字0.002和最小值0.00005,這會給-0.499? 。 used(X-1)/(1-min + 1) – tnaser 2012-04-05 14:41:14