我原本期望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
答案 0 :(得分:2)
来自arange
文档:
均匀间隔的数组。
对于浮点参数,结果的长度为
ceil((stop - start)/step)
。由于浮点溢出,此规则可能导致out的最后一个元素大于stop。
您的step
倍数组的长度大于321. linspace
对终点更加谨慎。