python中arange的奇怪行为

时间:2014-01-23 17:13:02

标签: python arrays numpy

我认为在范围内,第二个参数永远不会包含在列表中, 但是看看Python 2.7.3中会发生什么。

>>> import numpy
>>> numpy.arange(0.2,0.9,0.1)
array([ 0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8])
>>> numpy.arange(0.2,0.7,0.1)
array([ 0.2,  0.3,  0.4,  0.5,  0.6])
>>> numpy.arange(0.2,0.6,0.1)
array([ 0.2,  0.3,  0.4,  0.5])

>>> numpy.arange(0.2,0.8,0.1)
array([ 0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8])

有人知道这种行为的原因吗?

2 个答案:

答案 0 :(得分:4)

这是浮点精度的问题。

来自documentation

  

停止 :号码

     

间隔结束。间隔不包括此值,除了   某些情况下step不是整数和浮点舍入   影响外出的长度。

要了解有关浮点数限制的更多信息,请查看Python的tutorial

答案 1 :(得分:4)

In [169]: val = 0.2

In [170]: for i in range(6): #simulating the loop in arange.
   .....:     val += 0.1
   .....:

In [171]: val
Out[171]: 0.7999999999999999

浮点舍入错误。结果是还打印了最后一个值。