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