python - 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 的输出?我知道这是一个浮点计算问题。我错过了什么,一些舍入操作或一些调整?
非常感谢。
解决方案
您可以四舍五入到小数点后 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
推荐阅读
- python - ModuleNotFoundError:没有名为“dnspython”的模块
- c - 多线程快速排序使最后 1/6 未排序
- netlogo - 我在 netlogo 中是否错误地使用了 n-of 函数?
- python - 为什么 Tkinter Canvas 小部件以错误的比例显示图像?
- android-studio - 在 Android Studio 的 Koltin 类中生成 Getter 和 Setter
- python - 将绝对偏差编程为线性程序
- authlogic - 未初始化的常量 Authlogic::Session::Validation
- kotlin - 如何检查 Kotlin BufferedReader 使用 { return something } 调用了方法 close()?
- reactjs - 如何使用 react-router-dom 将我的按钮路由到另一个页面?
- python - 需要一些帮助在 python 中打开 excel 文件