如何使元组中的分布归一化



我试图在代码中进行一些归一化,我有一个内列表:

a  = [[ ('1', 0.03),
        ('2', 0.03),
        ('3', 0.06)]
      [ ('4', 0.03),
        ('5', 0.06),
        ('6', 0.06)]
      [ ('7', 0.07),
        ('8', 0.014),
        ('9', 0.07)]
                    ]

我尝试将元组中的分布归一化以获取列表b

b  = [[ ('1', 0.25),
        ('2', 0.25),
        ('3', 0.50)]
      [ ('4', 0.20),
        ('5', 0.40),
        ('6', 0.40)]
      [ ('7', 0.25),
        ('8', 0.50),
        ('9', 0.25)]
                    ]

我尝试了:

for i in a:
    for n, (ee,ww) in enumerate(i):
      i[n] = (ee,ww/sum(ww))

但失败了。

如何在Python中获得b

a  = [[ ('1', 0.03),
        ('2', 0.03),
        ('3', 0.06)],
      [ ('4', 0.03),
        ('5', 0.06),
        ('6', 0.06)],
      [ ('7', 0.07),
        ('8', 0.14),
        ('9', 0.07)]
                    ]
for i in a:
    s = sum(v[1] for v in i)
    i[:] = [(v[0], v[1] / s) for v in i]
from pprint import pprint
pprint(a)

打印:

[[('1', 0.25), ('2', 0.25), ('3', 0.5)],
 [('4', 0.2), ('5', 0.4), ('6', 0.4)],
 [('7', 0.25), ('8', 0.5), ('9', 0.25)]]

注意:

i[:] = [(v[0], v[1] / s) for v in i]用列表理解的新值替换列表i中的所有值。

最新更新