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) の場合、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 に答える