首页 > 解决方案 > Python - 如何以一定的精度输出一个 numpy 概率数组并保持其总和

问题描述

我有一个来自 pytorch softmax 函数的 6 个概率的 numpy 数组。

[0.055709425,0.04365404,0.008613999,0.0022386343,0.0037478858,0.88603604]  

我想将所有 6 个浮点数转换为字符串以表示分数输出,并且所有这些都需要四舍五入到一定的精度,比如 4。我使用以下代码来获取输出文本:

','.join(f'{x:.4f}' for x in scores)  # scores is the array above

输出是

0.0557,0.0437,0.0086,0.0022,0.0037,0.8860

总和为 0.9999 而不是 1.0。我有一堆像这样的数组,但总和为 0.9999 或 1.0001。所以我的问题是,如何获得总和为 1.0 的输出?我知道这是一个浮点计算问题。我错过了什么,一些舍入操作或一些调整?

非常感谢。

标签: pythonnumpypytorchprecisionprobability

解决方案


您可以四舍五入到小数点后 2 位,以减少该错误:

例如:

import numpy as np
a = np.array([0.055709425,0.04365404,0.008613999,0.0022386343,0.0037478858,0.88603604])
print(sum(a))

输出:

1.0000000241

现在:

new_array = [round(x,2) for x in a]
print(sum(new_array))

输出:

1.0

推荐阅读