7

如果一组值包含负数,我如何缩放它们以适应新范围?

例如,我有一组数字 (-10, -9, 1, 4, 10),它们必须缩放到范围 [0 1],这样 -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 回答