numpy.arange strage行为

时间:2013-07-08 16:49:03

标签: arrays numpy range

使用一系列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

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