我想在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]
答案 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]