7

値に負の数値が含まれている場合、値のセットを新しい範囲に合わせてスケーリングするにはどうすればよいですか?

たとえば、範囲 [0 1] にスケーリングする必要がある一連の数値 (-10、-9、1、4、10) があり、-10 は 0 にマップされ、10 は 1 にマップされます。

任意の数値「x」の通常の方法は次のようになります: (x - from_min) * (to_max - to_min) / (from_max - from_min) + to_min

ただし、これは負の数では機能しません。どんな助けでも大歓迎です。ありがとう!!

4

2 に答える 2

8

id はそうだと思います。あなたの例では、

from_min = -10,
from_max = 10,
to_max = 1,
to_min = 0.

これにより、

to_max - to_min = 1,
from_max - from_min = 20;

したがって、式を使用して

x -> (x - from_min) * (to_max - to_min) / (from_max - from_min) + to_min
   = (x - from_min) * 1 / 20 + 0
   = (x - from_min) / 20

収量

-10 -> (-10 + 10) / 20 = 0 / 20,
-9 -> (-9 + 10) / 20 = 1 / 20,
1 -> (1 + 10) / 20 = 11 / 20,
4 -> (4 + 10) / 20 = 14 / 20,
10 -> (10 + 10) / 20 = 20 / 20,

したがって、結果の値はすべて負ではありません。さらに、元の最小 -10 は to_min = 0 にマップされ、元の最大 10 は to_max = 1 にマップされます。実装でこれが機能しない場合は、整数型と浮動小数点型を混同していないかどうかを確認してください。

于 2012-10-30T10:59:09.897 に答える
1

あなたの式は負の数に対してうまく機能します。

あなたが持っている:

  • from_min = -10
  • from_max = 10
  • to_min = 0
  • to_max = 1

これらを式に代入します。

(x - (-10)) * (1 - 0) / (10 - (-10)) + 0

これは次のように単純化されます。

(x + 10) / 20
于 2012-10-30T10:49:09.510 に答える