python中arange的奇怪行为

python中arange的奇怪行为,python,arrays,numpy,Python,Arrays,Numpy,我想在arange第二个论点永远不会出现在名单上, 但是看看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]) >>&

我想在arange第二个论点永远不会出现在名单上, 但是看看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])
但是


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

这是浮点精度的问题

从:

停止:编号

幕间休息结束。间隔不包括此值,但在中除外 某些情况下,步长不是整数且浮点舍入 影响输出的长度

要了解更多关于浮动限制的信息,请查看Python的


浮点舍入误差。结果是最后一个值也被打印出来

如果要控制端点的包含或排除,请使用:
np.linspace(0.2,0.8,6,endpoint=False)
np.linspace(0.2,0.7,6)
@unutbu事实上
numpy.arange
的文档特别指出,当步骤是浮点时,更喜欢
linspace
。此外,这也是一个numpy问题,这不是python的问题。
>>> numpy.arange(0.2,0.8,0.1)
array([ 0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8])
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