首页 > 解决方案 > 迭代numpy arange会改变值

问题描述

我正在使用一个 numpy 范围。

[In] test = np.arange(0.01, 0.2, 0.02)
[In] test
[Out] array([0.01, 0.03, 0.05, 0.07, 0.09, 0.11, 0.13, 0.15, 0.17, 0.19])

但是,如果我遍历这个数组,它会遍历稍小的值。

[In] for t in test:
....     print(t)
[Out] 
0.01
0.03
0.049999999999999996
0.06999999999999999
0.08999999999999998
0.10999999999999997
0.12999999999999998
0.15
0.16999999999999998
0.18999999999999997

为什么会这样?

为了避免这个问题,我一直在四舍五入,但这是解决这个问题的最佳方法吗?

for t in test:
    print(round(t, 2))

标签: pythonnumpy

解决方案


我认为评论中提到的浮点数的性质问题所在。

如果你仍然认为你害怕离开它,我建议你将你的数字乘以 100,然后使用整数:

test = np.arange(1, 20, 2)
print(test)

for t in test:
    print(t / 100)

这给了我以下输出:

[ 1  3  5  7  9 11 13 15 17 19]
0.01
0.03
0.05
0.07
0.09
0.11
0.13
0.15
0.17
0.19

或者,您也可以尝试以下方法:

test = np.arange(1, 20, 2) / 100

推荐阅读