使用一系列numpy
In [22]: np.arange(0.95,0.98,0.01)
Out[22]: array([ 0.95, 0.96, 0.97, 0.98])
正如我所料。但是,当我做的时候
In [23]: np.arange(0.9,1.2,0.1)
Out[23]: array([ 0.9, 1. , 1.1])
我认为必须这样做:
Out[23]: array([ 0.9, 1. , 1.1, 1.2])
任何人都可以向我解释原因吗?
信息:Python 2.7.3(默认,2013年4月10日,05:13:16)和 Numpy 1.7.1
答案 0 :(得分:2)
实际上,奇怪的行为就是你所期望的。来自docs:
numpy.arange([start], stop[, step], dtype=None)
在给定的时间间隔内返回均匀间隔的值。
在半开区间[start,stop](in。)中生成值 换句话说,包括开始但不包括停止的间隔。)
使用非整数步骤(例如0.1)时,结果通常不会 始终如一。最好在这些情况下使用linspace。
您可能遇到了一些浮点舍入错误:
>>> (0.98-0.95) / 0.01
3.0000000000000027
>>> (1.2-0.9) / 0.1
2.999999999999999
数组中的项目数当然是该数字向上舍入,因此第一种情况将(错误地)包括端点,而第二种情况(正确)不包括端点。如文档所示,请查看np.linspace
。