重新调整0到1之间的数字

时间:2011-08-29 17:38:34

标签: rescale

我有以下数字列表:

3.16,4.72,6.44,8.25,3.76,4.87,5.76,6.5,7.32

我必须在(0,1)之间重新调整数字,以便:

1)最小的数字得到一个最接近0但不是0的值。

2)最大数字的值最接近1而不是1。

在我的研究中,

0表示完全合适,1表示完全不合适,这就是为什么我要将它们排除在最终结果之外。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

这种转变有帮助吗?

V' = 1/(1 + e^(-V)) -------- Logistic function


域名 - 实数,V可以取任何实际值 Range - (0,1) 0<V'<1V'<>0V'<>1和{{1}}

答案 1 :(得分:0)

您可能需要仿射映射(即y = mx + c形式),例如:

not_quite_0 = m*min_val + c
not_quite_1 = m*max_val + c

解决这些方程,得到:

m = (not_quite_1 - not_quite_0) / (max_val - min_val)
c = (max_val*not_quite_0 - min_val*not_quite_1) / (max_val - min_val)

您可以定义not_quite_0 = 0 + epsnot_quite_1 = 1 - eps,其中eps的值非常小。

答案 2 :(得分:0)

我不确定我理解你的问题,但是找到集合中的最大数字,并将集合中的每个数字除以该最大数字将为您提供合适的范围。

答案 3 :(得分:0)

使用仿射变换在Python中的一个简单示例:

 list = [3.16, 4.72, 6.44, 8.25, 3.76, 4.87, 5.76, 6.5, 7.32]

 # find the minimum value and range, and add 1% padding
 range_value = max(list) - min(list)
 range_value = range_value + range_value/50
 min_value = min(list) - range_value/100     

 # subtract the minimum value and divide by the range
 for index, item in enumerate(list):
    list[index] = (item - min_value) / range_value

 print list

给出结果:

 [0.010000000000000026, 0.310473824107246, 0.64176547632805592, 0.99039215686274518, 0.1255668554258639, 0.33936553796371205, 0.51078970684541003, 0.65332216187064218, 0.81126353095265591]

当然,您可以将填充量更改为您想要的小 - 对于范围,您需要添加两倍的最小值,因为您需要添加填充到范围的每一端。