python - 给定一个字典字典,其中键是 bin,值是频率,我如何有效地计算 bin 的均值和标准差?
问题描述
我有一个字典字典,其中内部字典的键表示直方图的 bin,值表示频率。我想计算 bin 的平均 bin 和 std。
dict = {'Group 1' : {1 : 100, 2:300, 4:100, 5:50},
{'Group 2' : {1 : 50, 2: 300},
{'Group 3' : {4 : 100, 5: 200},
...}
示例
对于Group 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 的均值和标准差?
transformed_dictionary = {'Group 1' : {'mean': 2.45 , 'std' : 1.23},
'Group 2' : {...},
...}
什么是这样做的有效方法?
解决方案
为避免构建辅助列表,您可以使用np.average
withweights=
参数:
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.2331509060227759},
'Group 2': {'mean': 1.8571428571428572, 'std': 0.3499271061118826},
'Group 3': {'mean': 4.666666666666667, 'std': 0.4714045207910317}}
推荐阅读
- python - ValueError:检查输入时出错:预期 input_1 具有形状(无,65563)但得到的数组具有形状(374、65536)
- node.js - 是否可以使用 IAM 在 gcloud 上托管的应用程序内以谷歌用户身份进行身份验证?
- c - 使用 qsort() 对整数数组进行排序并交换字符串
- javascript - HTML 无法加载数组/未捕获(承诺)
- html - Flexbox 列表 8 个,有 2 行
- c# - How can I add to an existing array/ienumerable collection in a foreach loop
- php - Laravel 5.6 Redirect to Intended URL after Login not working
- c# - OpenFileDialog can't load CSV files but can load xls/xlsx Excel files
- c# - Error converting data type nvarchar to datetime in a Stored Procedure from code
- sql - 如何在 Oracle 数据库中匹配此数据