python中字典值的加权平均值

2024-10-03 09:12:11 发布

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

我有一个由234个字典组成的参数网格,每个字典都有相同的键。然后我有一个权重列表,通过它我想计算这些字典值的加权平均值。换言之,我只需要获得一个字典,它具有初始243的相同键,但作为附加到每个键的值的加权平均值,使用243个权重。在

我试图使用Counter来累积结果,但它返回的值非常小,我对此没有意义。w[0]是243个权重的列表,每个权重都与grid中的243个字典相关

from collections import Counter

def avg_grid(grid, w, labels=["V0", "omega", "kappa", "rho", "theta"]):

    avgHeston = Counter({label: 0 for label in labels})

    for i in range(len(grid)):

        avgHeston.update(Counter({label: grid[i][label] * w[0][i] for label in labels}))

    totPar = dict(avgHeston)

    return totPar

有没有更容易实现的方法?在


Tags: in网格列表for参数labels字典counter
1条回答
网友
1楼 · 发布于 2024-10-03 09:12:11

您可能需要使用defaultdict来代替:

from collections import defaultdict

def avg_grid(grid, wgts, labels=["V0", "rho"]):

    avgHeston = defaultdict(int)

    for g,w in zip(grid, wgts):
        for label in labels:
            avgHeston[label] += g[label] * w

    return avgHeston

weights = [4,3]
grd = [{'V0':4,'rho':3}, {'V0':1,'rho':2}]

print(avg_grid(grd, weights))

输出:

^{pr2}$

注释:

我已经更改了w,因此您需要传入一个直接列表。您可能想这样调用函数:avg_grid(grids, w[0])

同样,这并不能产生平均值。你可能想在某个时刻做一个除以len(grid)的除法。在

而且for g,w in zip(grid, wgts):是一个更具python风格的迭代

相关问题 更多 >