可能有一个答案,但我甚至不知道我在找什么。它实际上更像是一个统计问题,而不是一个编程问题。 (我仍然想用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自动完成我正在尝试做的事情? - 如果没有,我应该如何进行计算。 (我的统计数据总是很糟糕)
答案 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]
我认为这就是你想要的,对吧?