Python:需要关于统计的帮助

时间:2014-09-18 03:06:56

标签: python statistics

可能有一个答案,但我甚至不知道我在找什么。它实际上更像是一个统计问题,而不是一个编程问题。 (我仍然想用python做)无论如何这里是我想做的事情;

假设我有一组范围为0-999999999的数字。我希望python更改这些数字并将它们置于0-10的限制范围内。

例如,我有3个数字[40,23,456]。我希望python根据它们在组中的值更改这些数字[3,1,10]。

我尝试过的是什么; 1-查找最大数量 2-查找最小号码 3- x =(max - min)/ 10 4- changednumber =(number-min)/ x

这就是诀窍,但是当最大数量与其他数字之间存在巨大差距时,价值观并不像我想要的那样。假设这个系列中的数字是[0,23,500,24254363],它就像[0,0,1,10]。我希望它是[0,1,5,10]。我必须以某种方式涉及数字的平均值,但我不知道如何。

希望你明白我想要完成的事情;   - 是否有任何功能使python自动完成我正在尝试做的事情?   - 如果没有,我应该如何进行计算。 (我的统计数据总是很糟糕)

1 个答案:

答案 0 :(得分:0)

您正在寻找一种名为" min-max scaling"

的标准化技术

对于更典型的0-1标准化,您将使用等式

          (x - min)
f(x) = -------------- 
          max - min

如果你想要一个特定的范围(a,b),你可以简单地修改方程式:

方程式很简单:

       (b-a)(x - min)
f(x) = --------------  + a
          max - min

如果我们实施它,它看起来像这样:

def minmax_scaler(X, new_range):
    min_val = min(X)
    max_val = max(X)
    scaled = []

    for x in X: 
        numerator = (new_range[1]-new_range[0])*(x - min_val)
        denominator = max_val - min_val
        scaled.append(numerator/denominator + new_range[0])
    return scaled

print(minmax_scaler(X=[40, 23, 456], new_range=[0,10]))

打印

[0.39260969976905313, 0.0, 10.0]

我认为这就是你想要的,对吧?