Numpy Arange生成不一致小数位的值

5

有人能解释一下这里发生了什么吗?

为什么0.3和0.7的值有更多的小数点。我只想要1个小数点的值。

threshold_range = np.arange(0.1,1,0.1)
threshold_range.tolist()

[Output]: [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7000000000000001, 0.8, 0.9]

1
这是正确的行为。这是因为 Python 和大多数编程语言一样,由于浮点数限制无法精确表示某些小数。请参见 https://dev59.com/MWEh5IYBdhLWcg3w5283 - tnknepp
可能是为什么浮点数不准确?的重复问题。 - tnknepp
很奇怪,对我来说打印正常。 - Axois
@tnknepp 谢谢你的评论。那就是我感到好奇的部分。 - Saed
2个回答

5

使用 np.round 函数

示例

import numpy as np

threshold_range = np.arange(0.1,1,0.1)
print(threshold_range.tolist())
print(np.round(threshold_range, 2).tolist())

输出:

[0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7000000000000001, 0.8, 0.9]
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

谢谢你的回答。但我很好奇它为什么会出现问题。既然你先给了一个解决方案,我会将其标记为答案。至于为什么,@tnknepp在评论中回答了这个问题。 - Saed
@Saed 看看这个 Python/numpy浮点数文本精度行为。 - bharatk

3
解决方案:您可以简单地使用round函数: 最初的回答
threshold_range = np.arange(0.1,1,0.1).round(1)
threshold_range.tolist() # [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]

错误原因:我认为这与浮点精度有关 ;)
最初的回答

谢谢你的回答。我不得不将上面的那个标记为答案,因为那是第一个回复(就像你的一样) :) - Saed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接