Python 给定一个字典字典,其中键是bin,值是frequency,如何有效地计算bin的平均值和std?

Python 给定一个字典字典,其中键是bin,值是frequency,如何有效地计算bin的平均值和std?,python,dictionary,Python,Dictionary,我有一个字典字典,其中内部字典的键表示直方图的箱子,值表示频率。我想计算平均垃圾箱和垃圾箱的标准偏差 dict = {'Group 1' : {1 : 100, 2:300, 4:100, 5:50}, {'Group 2' : {1 : 50, 2: 300}, {'Group 3' : {4 : 100, 5: 200}, ...} 示例 对于第1组我想得到的平均值和标准差与取100个1、300个2、100个4、50个5的列表的平均值和标准差相同

我有一个字典字典,其中内部字典的键表示直方图的箱子,值表示频率。我想计算平均垃圾箱和垃圾箱的标准偏差

dict = {'Group 1' : {1 : 100, 2:300, 4:100, 5:50},
       {'Group 2' : {1 : 50, 2: 300},
       {'Group 3' : {4 : 100, 5: 200},
        ...}
示例 对于
第1组
我想得到的平均值和标准差与取100个1、300个2、100个4、50个5的列表的平均值和标准差相同

l = []
l.extend([1 for j in range(0,100)])
l.extend([2 for j in range(0,300)])
l.extend([4 for j in range(0,100)])
l.extend([5 for j in range(0,50)])
np.mean(l) = 2.45
np.std(l) = 1.23
迭代每个字典并对其进行转换的最佳方法是什么,这样我就可以得到一个字典字典,它表示内部字典的bin的平均值和std

transformed_dictionary = {'Group 1' : {'mean': 2.45 , 'std' : 1.23},
                          'Group 2' : {...},
                           ...}
   

做这件事的有效方法是什么?

首先,你不应该给字典命名为dict,这会屏蔽名为dict的内置类。其次,您对dict的声明不太正确(而且它不是“词典词典词典”——它的值是词典)

印刷品:

{'Group 1': {'mean': 2.4545454545454546, 'std': 1.233150906022776}, 'Group 2': {'mean': 1.8571428571428572, 'std': 0.34992710611188255}, 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910316}}
{'Group 1': {'mean': 2.4545454545454546, 'std': 1.2331509060227759}, 
 'Group 2': {'mean': 1.8571428571428572, 'std': 0.3499271061118826}, 
 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910317}}

首先,您不应该将字典命名为
dict
,这将屏蔽名为
dict
的内置类。其次,您对dict的声明不太正确(而且它不是“词典词典词典”——它的值是词典)

印刷品:

{'Group 1': {'mean': 2.4545454545454546, 'std': 1.233150906022776}, 'Group 2': {'mean': 1.8571428571428572, 'std': 0.34992710611188255}, 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910316}}
{'Group 1': {'mean': 2.4545454545454546, 'std': 1.2331509060227759}, 
 'Group 2': {'mean': 1.8571428571428572, 'std': 0.3499271061118826}, 
 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910317}}

为了避免生成辅助列表,您可以使用
np.average
weights=
参数:

def weighted_avg_and_std(values, weights):
    """
    Return the weighted average and standard deviation.

    values, weights -- Numpy ndarrays with the same shape.
    """
    average = np.average(values, weights=weights)
    # Fast and numerically precise:
    variance = np.average((values-average)**2, weights=weights)
    return average, np.sqrt(variance)

d = {'Group 1' : {1 : 100, 2:300, 4:100, 5:50},
     'Group 2' : {1 : 50, 2: 300},
     'Group 3' : {4 : 100, 5: 200}}

out = {}
for k, v in d.items():
    m, s = weighted_avg_and_std([*v], [*v.values()])
    out[k] = {
        'mean': m,
        'std': s
    }

print(out)
印刷品:

{'Group 1': {'mean': 2.4545454545454546, 'std': 1.233150906022776}, 'Group 2': {'mean': 1.8571428571428572, 'std': 0.34992710611188255}, 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910316}}
{'Group 1': {'mean': 2.4545454545454546, 'std': 1.2331509060227759}, 
 'Group 2': {'mean': 1.8571428571428572, 'std': 0.3499271061118826}, 
 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910317}}

为了避免生成辅助列表,您可以使用
np.average
weights=
参数:

def weighted_avg_and_std(values, weights):
    """
    Return the weighted average and standard deviation.

    values, weights -- Numpy ndarrays with the same shape.
    """
    average = np.average(values, weights=weights)
    # Fast and numerically precise:
    variance = np.average((values-average)**2, weights=weights)
    return average, np.sqrt(variance)

d = {'Group 1' : {1 : 100, 2:300, 4:100, 5:50},
     'Group 2' : {1 : 50, 2: 300},
     'Group 3' : {4 : 100, 5: 200}}

out = {}
for k, v in d.items():
    m, s = weighted_avg_and_std([*v], [*v.values()])
    out[k] = {
        'mean': m,
        'std': s
    }

print(out)
印刷品:

{'Group 1': {'mean': 2.4545454545454546, 'std': 1.233150906022776}, 'Group 2': {'mean': 1.8571428571428572, 'std': 0.34992710611188255}, 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910316}}
{'Group 1': {'mean': 2.4545454545454546, 'std': 1.2331509060227759}, 
 'Group 2': {'mean': 1.8571428571428572, 'std': 0.3499271061118826}, 
 'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910317}}
这篇文章将帮助你:这篇文章将帮助你: