我正在使用arange函数来定义for循环迭代并获得意外的结果。
i = arange(7.8,8.4,0.05)
print i
是的,包括:
[ 7.8 7.85 7.9 7.95 8. 8.05 8.1 8.15 8.2 8.25 8.3 8.35 8.4 ]
但是使用8.35的停止值如下
i = arange(7.8,8.35,0.05)
产生以下结果
[ 7.8 7.85 7.9 7.95 8. 8.05 8.1 8.15 8.2 8.25 8.3 ]
但我希望我的射程在8.35结束!我知道我可以使用>;8.35和<;8.4的停止值来实现我的结果,但为什么它不同,而且在我看来,不一致?
编辑:我正在使用2.7版
我猜你看到了浮点舍入的效果。
numpy.arange
与python的range
做了相同的事情:它不包含“端点”。(例如,range(0, 4, 2)
将产生[0,2]
,而不是[0,2,4]
)但是,对于浮点步骤,舍入误差是累积的,有时最后一个值实际上包括端点。
如
arange
文档中所述:numpy.linspace
在起点和终点之间生成指定数量的点。顺便说一下,默认情况下,它确实包括端点。或许这与浮点数的限制有关。由于机器精度的原因,不可能将所有可能的值完美地存储为浮点。例如:
所以,8.4作为一个浮点数比8.4的实际值稍大,而8.35作为一个浮点数稍微少一点。
阿兰格函数的帮助说
对于Python2.7,浮点数字和字符串之间的转换现在在大多数平台上都是正确的四舍五入的。
在2.7中
在2.6中
相关问题 更多 >
编程相关推荐