numpy`arange`超过最终值?

时间:2016-02-13 04:31:32

标签: python numpy range precision

我原本期望numpy的arange(start,end)生成[start,end]范围内的值。以下示例演示了并非总是如此(最终值大于end):

  import numpy as np
  start=2e9
  end=start+321
  step=0.066833171999
  x=np.arange(start,end,step=step)
  print x[-1]>end  # Prints "True"
  print x[-1]-end  # Prints 0.00013661384582519531

错误似乎太大而不能由机器精度引起(但也许我正在考虑错误)。发生了什么事?

PS:我正在使用Numpy版本1.10.1

1 个答案:

答案 0 :(得分:2)

来自arange文档:

  

均匀间隔的数组。

     

对于浮点参数,结果的长度为ceil((stop - start)/step)。由于浮点溢出,此规则可能导致out的最后一个元素大于stop。

您的step倍数组的长度大于321. linspace对终点更加谨慎。