Skip to main content
 首页 » 编程设计

python之如何将总和不为 1 的概率变成总和为 1 的概率

2025年05月04日15EasonJim

如果您不知道键的数量和键的名称,如何将总和不为 1 的概率转化为总和为 1 的概率? 例如:

a = {'g' = 0.1, 'b' = 0.05, 'u' = 0.15, 'i' = 0.2} 

收件人:

a = {'g' = 0.2, 'b' = 0.1, 'u' = 0.3, 'i' = 0.4} 

请您参考如下方法:

您的目标是归一化:计算总和并将所有元素除以该总和:

total_inv = 1.0/sum(a.values()) 
for key,val in a.items(): 
    a[key] = val*total_inv 

或者更短(如 @Jean-FrançoisFabre 所说)使用字典理解:

total_inv = 1.0/sum(a.values()) 
a = {k:v*total_inv for k,v in a.items()} 

但这将构建一个新字典,因此不会更新对旧字典的引用。

在代码中我们计算 1.0/sum(..) 因为除法通常比乘法更昂贵,因此可以提高一些效率。