规范化Python中的数字列表

2024-04-25 17:53:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要规范化一个值列表以适应概率分布,即介于0.0和1.0之间。

我理解如何规范化,但很好奇Python是否有自动实现这一点的功能。

我想从:

raw = [0.07, 0.14, 0.07]  

normed = [0.25, 0.50, 0.25]

Tags: 功能列表raw规范化概率分布normed
3条回答

你要把名单正常化多久?

def psum(it):
    "This function makes explicit how many calls to sum() are done."
    print "Another call!"
    return sum(it)

raw = [0.07,0.14,0.07]
print "How many calls to sum()?"
print [ r/psum(raw) for r in raw]

print "\nAnd now?"
s = psum(raw)
print [ r/s for r in raw]

# if one doesn't want auxiliary variables, it can be done inside
# a list comprehension, but in my opinion it's quite Baroque    
print "\nAnd now?"
print [ r/s  for s in [psum(raw)] for r in raw]

输出

# How many calls to sum()?
# Another call!
# Another call!
# Another call!
# [0.25, 0.5, 0.25]
# 
# And now?
# Another call!
# [0.25, 0.5, 0.25]
# 
# And now?
# Another call!
# [0.25, 0.5, 0.25]

使用:

norm = [float(i)/sum(raw) for i in raw]

对求和进行规范化,以确保求和始终为1.0(或尽可能接近)。

使用

norm = [float(i)/max(raw) for i in raw]

对最大值进行标准化

尝试:

normed = [i/sum(raw) for i in raw]

normed
[0.25, 0.5, 0.25]

相关问题 更多 >