【发布时间】:2021-12-17 19:02:26
【问题描述】:
我有一个 Numpy 数组,它是通过将 Numpy 数组与浮点数相乘而获得的。
a = np.array([3, 5, 7, 9]) * 0.1
得到的数字是精确的,没有任何四舍五入。
>>> a
array([0.3 0.5 0.7 0.9])
但是,如果我将数组转换为带有 a.tolist() 的列表,则列表中会出现 0.30000000000000004 之类的条目,而不是 0.3。
>>> a.tolist()
[0.30000000000000004, 0.5, 0.7000000000000001, 0.9]
我的问题是,我该如何避免这种情况,如果有人出于纯粹的兴趣知道为什么会发生这种情况。非常感谢您的帮助。
【问题讨论】:
-
从 Numpy 文档的摘录中可能会了解它发生的原因:Data items are converted to the nearest compatible builtin Python type。你试过用 list() 代替吗?
-
@BedirYilmaz
list(a)也给出了我尝试过的混乱浮动结果。 -
这是一个显示问题,而不是转换问题。
-
正如 hpaulj 所说,这与
tolist无关,您可以通过with np.printoptions(precision=20):print(np.array([3, 5, 7, 9]) * 0.1)进行检查