重新缩放给定的最大值和最小值之间的值,其中max为正,min为负

时间:2013-04-17 10:27:06

标签: python perl math graph statistics

我希望重新缩放值数组(正浮点值和负浮点值),以便值介于-5到+5或-3到+2之间。我该如何缩小它。是否有任何具体的公式。我试过搜索,但没有找到任何可以处理负最小值的东西。

提前致谢...

3 个答案:

答案 0 :(得分:2)

缩放数据的最简单方法是确定数据的最大值(正数或负数),并使用它来相应地扩展所有其他数据。

例如,如果您的数据中最多有320个

 320 / 320 * 5  => 5
 160 / 320 * 5  => 2.5
-160 / 320 * 5  => -2.5

所以作为一般方程式

x / abs(maximum) * scale

答案 1 :(得分:1)

尝试这样的方法将值映射到(0,1)比例:

y = (x - xmin) / (xmax - xmin)

您还可以使用有限元形状函数:

y = h1*x1 + h2*x2

,其中

h1 = (z - 1)/2.0 for -1 <= z <= +1
h2 = (z + 1)/2.0 for -1 <= z <= +1

这会将您的值映射到(-1,1)比例。

答案 2 :(得分:0)

您可以使用线性插值/外推公式来获得所需的结果。

代码:

def rescale(val, in_min, in_max, out_min, out_max):
    return out_min + (val - in_min) * ((out_max - out_min) / (in_max - in_min))

print(rescale(4, 4, 20, 0, 100))  # => 0.0
print(rescale(12, 4, 20, 0, 100)) # => 50.0
print(rescale(20, 4, 20, 0, 100)) # => 100.0
print(rescale(0, 4, 20, 0, 100))  # => -25.0

请注意,此代码不会根据提供的最小和最大边界检查您的值,因此它将按照上一个示例进行推断。根据需要进行修改。