【问题标题】:Iterating over numpy arange changes the values迭代numpy arange会改变值
【发布时间】:2020-05-13 17:29:10
【问题描述】:

我正在使用一个 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))

【问题讨论】:

标签: python numpy


【解决方案1】:

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

如果您仍然认为自己害怕这样,我建议您将数字乘以 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

【讨论】:

    【解决方案2】:

    你试过了吗:

    test = np.arange(0.01, 0.2, 0.02, dtype=np.float32)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多