编写最小-最大缩放器功能

时间:2019-05-01 04:53:03

标签: python data-science

我想在python中编写一个用于计算最小-最大比例的函数,以返回列表。

x = [1, 2, 3, 4]

def normalize(x):

    for i in range(len(x)):
        return [(x[i] - min(x)) / (max(x) - min(x))]

然后调用该函数:

normalize(x):

结果:

[0.0]

我期望结果是:

[0.00, 0.33, 0.66, 1.00] 

3 个答案:

答案 0 :(得分:3)

基于@shehan的解决方案:

x = [1, 2, 3, 4]

def normalize(x):
    return [round((i - min(x)) / (max(x) - min(x)), 2) for i in x]

print(normalize(x))

完全给您您想要的。结果与其他解决方案不同(因此正是您想要的)。

结果:

[0.0, 0.33, 0.67, 1.0]

答案的循环版本,以便op可以理解:

x = [1, 2, 3, 4]

def normalize(x):
    # A list to store all calculated values
    a = []
    for i in range(len(x)):
        a.append([(x[i] - min(x)) / (max(x) - min(x))])
        # Notice I didn't return here
    # Return the list here, outside the loop
    return a

print(normalize(x))

答案 1 :(得分:1)

尝试一下。

def normalize(x):
    return [(x[i] - min(x)) / (max(x) - min(x)) for i in range(len(x))]

答案 2 :(得分:1)

您要除以max(x),然后减去min(x)

您还将重复计算max(x)min(x)。您可以改成这样:

x = [1, 2, 3, 4]

def normalize(x):
    maxx, minx = max(x), min(x)
    max_minus_min = maxx - minx
    return [(elt - minx) / max_minus_min for elt in x]

如果要保持精度,可以按照@ruturaj的建议舍入结果:

return [round((elt - minx) / max_minus_min, 2) for elt in x]