迭代numpy数组

时间:2018-03-28 14:05:02

标签: python python-3.x numpy

使用以下代码:

import numpy as np
k = .2
A = np.arange(.01, k, .01, dtype=np.float64)

# values
print(A)
print([A[i] for i in range(len(A))])

# comparison
print(A == [A[i] for i in range(len(A))])

# check for value
print(.06 in A)

相应的输出是:

[0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1  0.11 0.12 0.13 0.14
 0.15 0.16 0.17 0.18 0.19]
[0.01, 0.02, 0.03, 0.04, 0.05, 0.060000000000000005, 0.06999999999999999, 0.08, 0.09, 0.09999999999999999, 0.11, 0.12, 0.13, 0.14, 0.15000000000000002, 0.16, 0.17, 0.18000000000000002, 0.19]
[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True]
False

这里发生了什么样的魔法?我怎么能迭代数组保持精度呢?

编辑:正如在Is floating point math broken ?中预先确定的那样,精确度的丢失是一个已知问题,与语言无关。我知道 python处理这个的方法是什么?使用epsilon对我来说似乎有点笨拙

1 个答案:

答案 0 :(得分:0)

如果你只是使用多行换环来解决这个问题'消失了。这似乎是一个问题'使用发电机时。

for i in range (len(A)):
    print(A[i])

给出

0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
0.12
0.13
0.14
0.15
0.16
0.18
0.19